регулярное выражение, которое соответствует только цифры, цифры с запятой и скобками, но не кавычки - PullRequest
0 голосов
/ 28 августа 2018

Я работаю над этим регулярным выражением, которое, кажется, работает в большинстве случаев, кроме одного, и мне нужна помощь в выяснении, как заставить его работать с сценариями ниже Моя строка такая же, как и ниже, и регулярное выражение должно соответствовать только числам, числам с запятыми, числам с круглыми или круглыми скобками. Исключением из этого правила является то, что оно не должно совпадать с числами в приведенных выше сценариях, заключенных в кавычки.

(  123 122,1232  (123123123) "(123,12321)"    ,1212  12132,121,  "123423"  "1234,12343"  abc,1233  1233,abc)

123 match <br>
122,1232 match<br>
(123123123) match<br>
"123,12321" should not match since it is in quotes<br>
,1212 its fine to match or not match this case<br>
12132,121 match<br>
"123423" should not match again because of quotes<br>
"1234,12343" should not match same reason as above<br>
abc,1233 should not match the numbers here<br>
1234,abc should not match here<br>

Регулярное выражение, которое я придумал:

((?=\s)[\d,]+(?=\)|\s))(?=([^"]*"[^"]*")*[^"]*$)

Пожалуйста, помогите мне понять, почему abc,1233 соответствует

1 Ответ

0 голосов
/ 29 августа 2018

Regex, с которым вы пришли, не работал для меня, когда я попробовал его, поэтому я пришел с альтернативным решением, надеюсь, оно поможет:

(?<=\s)(\(?[0-9,]+\)?)(?=\s)

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

...