регулярное выражение var экстракт без точки - PullRequest
1 голос
/ 07 февраля 2012

У меня есть строка:

"{balba $aaa = $bbb.test == $ddd == $sdfsf.dfgdfg.dfg}"

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

Ожидаемый результат:

  1. $ aaa
  2. $ ddd

Мое регулярное выражение \$[a-zA-Z0-9_]*[^\.], но оно не работает.

Ответы [ 2 ]

3 голосов
/ 07 февраля 2012

Вы не указали язык, поэтому вот решение, использующее отрицательный прогноз и притяжательный квантификатор ( ПРИМЕЧАНИЕ: не поддерживается некоторыми разновидностями ).

\$\w++(?!\.)

См.это здесь в Regexr

\w++ Совпадение хотя бы с одним символом слова и не возвращение.

(?!\.) отрицательный прогноз, который гарантирует отсутствие . подписался

1 голос
/ 07 февраля 2012

Вот как вы могли бы сделать это в Python, используя положительные и отрицательные прогнозные утверждения ((?=...) и (?!...)):

>>> import re
>>> s = '"{balba $aaa = $bbb.test == $ddd == $sdfsf.dfgdfg.dfg}"'
>>> for index, found in enumerate(re.findall('\$[a-zA-Z0-9_]+(?!\.)(?=\W)', s)):
...     print '%d. %s' % (index + 1, found)
...
1. $aaa
2. $ddd

... где вы утверждаете, что идентификатор содержит только разрешенные символы, за которыми не следуют точки и затем неидентифицирующий символ.

Это можно упростить до:

>>> for index, found in enumerate(re.findall('\$\w+(?!\.)(?=\W)', s)):
...     print '%d. %s' % (index + 1, found)
...
1. $aaa
2. $ddd
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...