Как установить регулярное выражение для этого текста? - PullRequest
1 голос
/ 28 сентября 2019

Я хочу получить массив слов из текста следующим образом:

# yān, yè, yīn #

Я создаю шаблон #((.*?),{0,1})+#, чтобы получить массивyān, и yīn (слово в массиве особенное, не в английском формате), однако оно не работает, как я думал.Что я должен сделать, чтобы решить эту проблему, кто-нибудь может мне помочь?

Ответы [ 2 ]

1 голос
/ 28 сентября 2019

Если якорь \G и положительный вид сзади поддерживаются, и вы хотите сопоставить ту структуру данных, где # присутствует в начале и в конце, вы можете использовать группу захвата.

(?:#|\G(?!^))([^#,\r\n]+),?(?=[^\r\n#]*#(?<!,#))

По частям

  • (?: Группа без захвата
    • # Совпадение буквально
    • | Или
    • \G(?!^) Утверждениепозиция в конце предыдущего матча, а не в начале
  • ) Закрыть группу без захвата
  • ([^#,\r\n]+) Захват группа 1 ,соответствует любому символу за исключением #, , или новой строки
  • ,? Соответствие необязательно ,
  • (?= Положительный прогноз, утверждают, что справа -
    • [^\r\n#]* Совпадение 0+ раз с любым символом, кроме # или новой строкой
    • #(?<!,#) Совпадение # и утверждение того, что непосредственно слева не является ,
  • ) Закрыть положительный прогноз

Regex demo

0 голосов
/ 28 сентября 2019

Может быть,

 (?<=#|,)[^,#]+

Демо 1

или

[^,#]+(?=,|#)

Демо 2

извлечет эти нужные строки.


Если вы хотите упростить / изменить / изучить выражение, это было объяснено на верхней правой панели regex101.com .Если хотите, вы также можете посмотреть в эту ссылку , как она будет сопоставляться с некоторыми примерами ввода.


Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...