繁体   English   中英

Python 正则表达式:添加限制,如果在匹配之前的某处和之后的某处有引号,则它不应该是匹配的

[英]Python Regex: add restriction that it should NOT be a match if there is a quotation mark somewhere before the match AND somewhere after

我想:

  1. 删除下面示例匹配中的任何前导空格,并且
  2. 排除在字符串前的某些 position 处有引号且在字符串后的某些 position 处有另一个引号的匹配项(即不应匹配的字符串用引号括起来,但引号不一定直接在细绳)。

我尝试将消极的后视和前瞻结合起来,但我不知何故无法弄清楚。

太感谢了!

我目前的 Python 正则表达式如下:

r'''(?<=[@])\s*[A-Z0-9.]+(?=\()'''
  1. @STRING1( # 结果:'STRING1' --> 有效
  2. @ STRI..NG2(# Result: 'STRI..NG2' --> 好的,但不包括空格。
  3. @ STRING.3( # Result: 'STRING.3' --> 好的,但不包括空格。

示例文本:
@STRING4("@STRING5( 可能还有"另一个@STRING6("__"可能这里是文本") 和@STRING7("甚至可能还有另一个@STRING8("---"和一个"最后"一个"@STRING9( &"也许还有一些"文本"

现在返回(包括前导空格):

  • '字符串 4'
  • 'STRING5'
  • '字符串 6'
  • '字符串 7'
  • “字符串 8”
  • 'STRING9'

期望回报:

  • '字符串 4'
  • '字符串 6'
  • 'STRING8'

我不能做你想做的一切,因为 Python 不允许非固定宽度的后视,但是这个:

reg = r"(?<=@)\s*([A-Z\d.]+)(?=(?:[^\"]*\"[^\"]*\")*$)"

应该管用。 注意它期望引号在整个字符串中正确平衡。 它也不考虑任何转义引号( \" )。

编辑:我添加了一个捕获组,您可以使用它来删除前导空格。

一种方法是使用以下正则表达式

reg = r'(?:\"[^\"]+\")|(?:@\s*([A-Z0-9.]+)\()'

然后,您需要检查匹配是否具有组 1。如果匹配,则为错误匹配。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM