Сопоставление всех выражений с использованием JS регулярного выражения - PullRequest
0 голосов
/ 01 августа 2020

Мне нужно сопоставить все выражения (пример: Laugh at Loud (LoL)) с 2 или более чем 3 словами. Мое регулярное выражение работает только для текста с выражением длиной 3 символа. Как сделать регулярное выражение очень универсальным c (без указания длины как 3), чтобы выражения выбирались, даже если они имеют любую длину.

Общая ссылка обеспечивает его обзор.

Последнее выражение

усиление света стимулированным излучением (ЛАЗЕР) Программа развития зеленых навыков (GSDP) не выбираются с использованием следующего регулярного выражения

\b(\w)[\w']*[^a-zA-Z()]* (\w)[\w']*[^a-zA-Z()]* (\w)[\w']*[^a-zA-Z()]* \(\1\2\3\)

\b(?:\w[\w']* [^a-zA-Z]*){3} ?\([A-Z]{3}\)

https://regex101.com/r/QPMo5M/1

Ответы [ 2 ]

0 голосов
/ 01 августа 2020
\b(\w)[-'\w]* (?:[-`."?,~=@!/\\|+:;%°*#£&^€$¢¥§'\w]* ){2,}\(\1[A-Z]{2,}\)

Я поместил несколько специальных символов между

0 голосов
/ 01 августа 2020

Вы можете попробовать следующее:

/\b(\w)[-'\w]* (?:[-'\w]* ){1,}\(\1[A-Z]{1,}\)/gi

ОБНОВЛЕНИЕ

Как @ ikegami прокомментировал , это неаккуратное регулярное выражение соответствует также таким вещам, как Bring some drinks (beer) и Bring something to put on the grill (BBQ). Я думаю, что эти случаи можно отфильтровать, используя правильный код JavaScript после сопоставления регулярных выражений. Возможно, в случае Bring some drinks (beer) мы сможем обнаружить его, используя тот факт, что (beer) не имеет прописных букв. В случае Bring something to put on the grill (BBQ) мы можем обнаружить это, используя тот факт, что нет совпадающих начальных букв для вторых B и Q в Bring something to put on the grill.

ОБНОВЛЕНИЕ 2

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

We need to use technologies from Natural Language Processing (NLP).

Соответствует "need to use technologies from Natural Language Processing (NLP) ", а не" Natural Language Processing (NLP) ". Этими проблемами тоже надо заняться.

ОБНОВЛЕНИЕ 3

Следующее регулярное выражение соответствует акронимам длиной от 2 до 5 и не имеет проблем, упомянутых выше. И я думаю, что его можно довольно легко расширить для поддержки большей длины, как вы хотите:

/\b(\w)\S* (?:(?:by |of )?(\w)\S* (?:(?:by |of )?(\w)\S* (?:(?:by |of )?(\w)\S* (?:(?:by |of )?(\w)\S* )?)?)?) *\(\1\2\3\4\5\)/gi
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...