Как предотвратить добавление дополнительной информации в это регулярное выражение? - PullRequest
0 голосов
/ 16 мая 2018

Учитывая следующие тестовые строки:

A simple paper
A simple, burnt paper

Я хочу сопоставить ключ «простой» (который также может быть другими ключами), но НЕ включать определенную дополнительную информацию.Например, простая бумага такая же, как простая зеленая бумага;оба считаются простыми документами и должны иметь соответствующий ключ.

У меня есть следующее регулярное выражение:

A (?P<key>.+)(?:, green|) paper

Проблема в том, что я не могу разделить«зеленая» часть, которую нужно игнорировать.

Дополнительные входные данные, чтобы уточнить, какие пробелы необходимы для группы ключей:

A fairly complex paper
A fairly complex, green paper

Оба они должны совпадать, где key* Только 1017 *.

Дополнительные входные данные для уточнения группы исключений:

A simple, torn paper
A simple, torn, green paper

Оба они должны совпадать, где key равно simple, torn, поскольку , green указано как необязательное.с целью фильтрации по явному исключению.

Что я пытаюсь сказать с помощью (?:, green|), так это то, что , green МОЖЕТ появиться в этой точке, и, если это так, захватить его за пределами группы keyчтобы он там не появлялся.

Возможные символы для ключа:

[a-zA-Z,_\- ] - Обратите внимание на включение пробела [ ] и запятой [,].

1 Ответ

0 голосов
/ 16 мая 2018

Вы можете использовать это регулярное выражение: (An?(?: [A-Za-z_-]+)*)(?:,[A-Za-z_ -]+)*( [A-Za-z_-]+)

Чтобы отбросить среднюю часть, вместо того, чтобы брать весь матч, возьмите группу 1 и группу 2 и соедините их вместе, т.е. match[1] + match[2] на любом языке, который вы используете.

...