正则表达式,而不是语句
Regex, not statement
嘿嘿,
我有正则表达式
([ ;(\{\}),\[\'\"]?)(_[a-zA-Z_\-0-9]*)([ =;\/*\-+\]\"\'\}\{,]?)
匹配每一次出现的
_var
问题是它也匹配像
这样的字符串
test_var
我试图添加一个新的匹配组来否定任何单词字符,但它没有正常工作。
谁能知道我该怎么做才能不匹配像 var_var 这样的字符串?
感谢帮助!
您可以使用以下 "fix":
([[ ;(){},'"]?)(\b_[a-zA-Z_0-9-]*\b)([] =;/*+"'{},-]?)
^ ^
单词边界\b
是一个锚点,它断言单词和非单词边界之间的位置。这意味着如果您的 _var
以字母、数字或 . 开头,则永远不会匹配。此外,我删除了可选捕获组中字符 类 内的过度转义。请注意所谓的 "smart placement" 连字符和方括号,对于 Python 正则表达式可能不是那么重要,但仍然是编写正则表达式的最佳实践。此外,在 Python 正则表达式中你不需要转义 /
因为那里没有正则表达式分隔符。
还有一个提示:没有 u
修饰符,\w
匹配 [a-zA-Z0-9_]
,所以你可以将正则表达式写成
([[ ;(){},'"]?)(\b_[\w-]*\b)([] =;/*+"'{},-]?)
还有一个IDEONE demo(注意r'...'
的用法):
import re
p = re.compile(r'([[ ;(){},\'"]?)(\b_[\w-]*\b)([] =;/*+"\'{},-]?)')
test_str = "Some text _var and test_var"
print (re.findall(p, test_str))
嘿嘿,
我有正则表达式
([ ;(\{\}),\[\'\"]?)(_[a-zA-Z_\-0-9]*)([ =;\/*\-+\]\"\'\}\{,]?)
匹配每一次出现的
_var
问题是它也匹配像
这样的字符串test_var
我试图添加一个新的匹配组来否定任何单词字符,但它没有正常工作。
谁能知道我该怎么做才能不匹配像 var_var 这样的字符串?
感谢帮助!
您可以使用以下 "fix":
([[ ;(){},'"]?)(\b_[a-zA-Z_0-9-]*\b)([] =;/*+"'{},-]?)
^ ^
单词边界\b
是一个锚点,它断言单词和非单词边界之间的位置。这意味着如果您的 _var
以字母、数字或 . 开头,则永远不会匹配。此外,我删除了可选捕获组中字符 类 内的过度转义。请注意所谓的 "smart placement" 连字符和方括号,对于 Python 正则表达式可能不是那么重要,但仍然是编写正则表达式的最佳实践。此外,在 Python 正则表达式中你不需要转义 /
因为那里没有正则表达式分隔符。
还有一个提示:没有 u
修饰符,\w
匹配 [a-zA-Z0-9_]
,所以你可以将正则表达式写成
([[ ;(){},'"]?)(\b_[\w-]*\b)([] =;/*+"'{},-]?)
还有一个IDEONE demo(注意r'...'
的用法):
import re
p = re.compile(r'([[ ;(){},\'"]?)(\b_[\w-]*\b)([] =;/*+"\'{},-]?)')
test_str = "Some text _var and test_var"
print (re.findall(p, test_str))