我有一个字符串:
"{balba $aaa = $bbb.test == $ddd == $sdfsf.dfgdfg.dfg}"
我尝试创建一个正则表达式,提取所有没有点的变量。
预期结果是:
我的正则表达式是\$[a-zA-Z0-9_]*[^\.]
,但它不起作用。
答案 0 :(得分:3)
你没有给出语言,所以这里有一个使用负向前瞻和占有量词的解决方案(注意:不支持某些风格)。
\$\w++(?!\.)
\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