没有点的正则表达式var

时间:2012-02-06 21:10:56

标签: regex string filter

我有一个字符串:

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

我尝试创建一个正则表达式,提取所有没有点的变量。

预期结果是:

  1. $ AAA
  2. $ DDD
  3. 我的正则表达式是\$[a-zA-Z0-9_]*[^\.],但它不起作用。

2 个答案:

答案 0 :(得分:3)

你没有给出语言,所以这里有一个使用负向前瞻和占有量词的解决方案(注意:不支持某些风格)。

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

here on Regexr

\w++匹配至少一个单词字符,不要回溯。

(?!\.)否定前瞻,确保后面没有.

答案 1 :(得分:1)

以下是使用正面和负面lookahead assertions(?=...)(?!...))在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