Я хочу написать определение шага, которое будет работать для любого из трех шагов ниже. Мне нужно сделать последние два параметра в двойных кавычках необязательными.
Given I do "x"
Given I do "x", "y "
Given I do "x", "y ", " z"
Я пробовал несколько выражений:
[Given(@"I do ""(.*)"", ""(.*)?"", ""(.*)?""")]
[Given(@"I do ""(.*)"", ""(.*)""?, ""(.*)""?")]
[Given(@"I do ""(.*)"", (""(.*)"")?, (""(.*)"")?")]
[Given(@"I do ""(.*)"", [""(.*)""]?, [""(.*)""]?")]
Спасибо.





Я считаю, что это соответствует / группирует то, что вы пытаетесь сопоставить
I do \"(.*?)\"(?:, \"(.*?)\")?(?:, \"(.*?)\")?
@Razkar Я признаю, что наличие групп захвата внутри групп без захвата немного беспорядочно. Но это регулярное выражение, так что в этом вся суть! Также не забудьте принять ответ!
Однако я должен использовать "" вместо \ "[Given (@" Я делаю "" (. *) "" (?:, "" "(. *)?" ")? (?:," "(. *)?" ")?]
@Razkar Я предполагаю, что это вещь из C#, я не уверен, так как я грязный разработчик, работающий только на питоне.
Это. Это дословная строка C#, начинающаяся с @
Регулярное выражение:
I do \".*?\"(?:, \".*?\")*
Объяснение:
/I do \".*?\"(?:, \".*?\")*/
I do matches the characters I do literally (case sensitive)
\" matches the character " literally (case sensitive)
.*? matches any character (except for line terminators)
*? Quantifier — Matches between zero and unlimited times, as few times as possible, expanding as needed (lazy)
\" matches the character " literally (case sensitive)
Non-capturing group (?:, \".*?\")*
* Quantifier — Matches between zero and unlimited times, as many times as possible, giving back as needed (greedy)
, matches the characters , literally (case sensitive)
\" matches the character " literally (case sensitive)
.*? matches any character (except for line terminators)
\" matches the character " literally (case sensitive)
Отлично. Я действительно пробовал неподходящую группу, но забыл включить запятую и пробел в скобку несовпадающей группы. Спасибо!