Регулярное выражение: найти число в скобках и заданную строку c - PullRequest
0 голосов
/ 30 марта 2020

Я хотел бы найти строки, где между скобками и строкой стоит число BAC после него

Например:

ABABBAB (87490), BAC  ===> OK
BLABLABLA (65688), BIC  ===> Not OK
ABABBAB (75664), EEE  ===> Not OK

Я нашел ответ, чтобы получить числа между круглые скобки

^.*?\([^\d]*(\d+)[^\d]*\).*$ здесь пример

Теперь я хотел бы добавить условие, соответствующее также строке BAC

Ответы [ 2 ]

3 голосов
/ 30 марта 2020

Примерно так должно работать:

^.*?\([^\d]*(\d+)[^\d]*\),\s+BAC\s*$

, - прямое совпадение

\s+ - один или несколько пробелов

BAC - прямое совпадение

\s* - ноль или более пробелов


Если вы хотите сопоставить и сообщить произвольное слово, это должно сработать:

^.*?\([^\d]*(\d+)[^\d]*\)\s+(\S+).*$

\S+ - один или несколько непробельных символов


Для соответствия BAC,, за которыми следует что-либо:

^.*?\([^\d]*(\d+)[^\d]*\),\s+BAC,.*$
1 голос
/ 31 марта 2020

Вы можете избежать использования группы захвата со следующим регулярным выражением:

(?<=\()\d+(?=\))(?=.*\bBAC\b)

Демонстрация

Каждая строка из одной или нескольких цифр заключена в скобки и сопровождается слово BAC (но не BACK или ABAC, например) сопоставляется.

Это регулярное выражение работает с PCRE (PHP), Python, Javascript, механизмами регулярных выражений Onigmo и другие, которые поддерживают фиксированную позитивную перспективу и позитивную перспективу. См. Таблицу сравнения здесь .

Механизм регулярных выражений выполняет следующие операции.

(?<=\()        # match '(' in a positive lookbehind
\d+            # match 1+ digits
(?=\))         # match ')' in a positive lookahead
(?=.*\bBAC\b)  # match 0+ chars followed by `BAC` with word breaks fore and aft
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...