Соответствующее слово без точки с регулярным выражением Python - PullRequest
1 голос
/ 10 апреля 2019

У меня есть строка в файле, которая может иметь формат ниже 2:

/begin MEASUREMENT XXX.YYYY "Status ASC" 

и

/begin MEASUREMENT XXXX "Status ASC" 

Я хочу написать выражение, которое не соответствует первому формату, но может соответствовать второму формату и может дать мне XXXX из второго формата.

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

/begin\s+MEASUREMENT (\w+)

Какие изменения я могу внести в свое регулярное выражение?

Ответы [ 2 ]

2 голосов
/ 10 апреля 2019

Вам может потребоваться пробел после \w+:

/begin\s+MEASUREMENT (\w+)(?!\S)
/begin\s+MEASUREMENT (\w+)(?=\s|$)
/begin\s+MEASUREMENT (\w+)(?:\s|$)

См. Демонстрационную версию regex и график Regulex :

enter image description here

(?!\S) - это отрицательный прогноз, который не соответствует совпадению, если следующий символ не является пробелом. По значению он равен (?=\s|$), положительному прогнозу, требующему пробела или конца строки непосредственно справа от текущего местоположения. (?:\s|$) является потребляющим вариантом последнего регулярного выражения (т. Е. Пропуски, если они совпадают, будут отображаться во всем совпадении), но поскольку вы захватываете слово раньше, это не должно быть проблемой.

1 голос
/ 10 апреля 2019

Вы можете использовать границу слова \b и отрицательный прогноз (?!, чтобы утверждать, что справа не точка:

/begin\s+MEASUREMENT (\w+)\b(?!\.)

Regex demo

...