【问题标题】:Regex, not statement正则表达式,而不是语句
【发布时间】:2015-08-23 17:11:31
【问题描述】:

嘿嘿,

我有正则表达式

([ ;(\{\}),\[\'\"]?)(_[a-zA-Z_\-0-9]*)([ =;\/*\-+\]\"\'\}\{,]?)

匹配每次出现的

_var

问题是它也匹配字符串

test_var

我尝试添加一个新的匹配组来否定任何单词字符,但它没有正常工作。

有人能弄清楚我必须做什么才能不匹配像 var_var 这样的字符串吗?

感谢您的帮助!

【问题讨论】:

  • 也许,\b_[a-zA-Z_\-0-9]+\b 是你所需要的。
  • 我在 regex101 中尝试过,工作正常,但我的 python 脚本中没有任何匹配项。 regex = re.compile('([ ;(\{\}),\[\'\"]?)(\b_[a-zA-Z\_\-0-9]+\b)([ =;\/*\-+\]\"\'\}\{,]?)') found = regex.findall(line) found = list(set(found))我错过了什么?
  • 好的,修好了。感谢您的帮助!
  • 我将其发布为答案。

标签: python regex regex-negation negation


【解决方案1】:

您可以使用以下“修复”:

([[ ;(){},'"]?)(\b_[a-zA-Z_0-9-]*\b)([] =;/*+"'{},-]?)
                ^                 ^

regex demo

单词边界\b 是一个锚点,它断言单词和非单词边界之间的位置。这意味着如果您的 _var 以字母、数字或 .此外,我删除了可选捕获组中字符类中的过度转义。请注意,连字符和方括号的所谓“智能放置”对于 Python 正则表达式可能并不那么重要,但仍然是编写正则表达式的最佳实践。此外,在 Python 正则表达式中,您不需要转义 /,因为那里没有正则表达式分隔符。

还有一个提示:没有u 修饰符,\w 匹配[a-zA-Z0-9_],因此您可以将正则表达式编写为

([[ ;(){},'"]?)(\b_[\w-]*\b)([] =;/*+"'{},-]?)

regex demo 2

还有一个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))

【讨论】:

  • 就像已经提到的那样,它工作得很好。谢谢你的解释,现在我也明白你给我的东西了。谢谢!
猜你喜欢
  • 2015-09-16
  • 2021-04-07
  • 1970-01-01
  • 1970-01-01
  • 2023-03-14
  • 2019-11-28
  • 1970-01-01
  • 2011-05-01
  • 1970-01-01
相关资源
最近更新 更多