регулярное выражение совпадает с числами или числами в двоеточии, но не после определенной строки - PullRequest
1 голос
/ 24 марта 2020

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

str_extract( "2010:2012,mean(2010:2015)", '[0-9:0-9]+')
## 2010:2012 correct

str_extract( "mean(2010:2015),2010:2012", '[0-9:0-9]+')
## 2010:2015 incorrect 

Как проверить наличие круглых скобок?

1 Ответ

2 голосов
/ 24 марта 2020

Прежде всего [0-9:0-9]+ не правильно. Как это соответствует 1 или более ди git или двоеточие. Таким образом, он будет соответствовать 123 или просто :.

Регулярное выражение коррекции будет:

[0-9]+:[0-9]+

Теперь, если вы хотите избежать строки в скобках, используйте отрицательный прогноз (при условии, что все круглые скобки являются сбалансированными и неэкранированными):

[0-9]+:[0-9]+(?![^()]*\))

(?![^()]*\)) - это условие, основанное на отрицательном прогнозировании, которое может дать сбой при совпадении: number:number сопровождается ) без сопоставления ( и ).

Обратите внимание, что в r вы должны будете использовать двойное экранирование:

'[0-9]+:[0-9]+(?![^()]*\\))'

RegEx Demo

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