【问题标题】:Regex - match a pattern (from capture) before a capture group正则表达式 - 在捕获组之前匹配模式(来自捕获)
【发布时间】:2023-03-15 11:05:01
【问题描述】:

我必须用这个方案匹配文本:

  • 捕获不是 ['] (\1) 的 [\w-/]*
  • 捕获 (\2) 后面的 [']+
  • 并将 \2\1\2 替换为 \1

例子:

我的输入文本是:l''''text'''
正确的输出是:l'text

我试过了:

re.sub(r"(\5)(?=((([\w\-\/](?<!'))+)('+)))", r"\2", text)

【问题讨论】:

  • @Nic 请在您的帖子中添加一些解释。而且你不能在捕获之前引用一个组..
  • zetysz - 谢谢...使用它您可以不受控制地替换,因为您无法区分文本前后的 ['] 数量...
  • @AvinashRaj - 我需要删除无用的标点符号......在意大利语中,您必须减少文章,然后是带有 ['] 的人声,并且在此文件中我必须管理带有一些错误的文本。 .. 我必须保持单身 ['] 遵守规则并扔掉那些多余的。
  • @AvinashRaj - [而且你不能在捕获之前引用一个组..] 我正在尝试这个,因为我确实需要知道有多少 ['] 跟随一个词来删除相同的单词前的数量...

标签: python regex python-2.7 replace


【解决方案1】:

你可以在字符串后面匹配之前匹配的引号:

('+)([\w/-]+)\1

\1 与匹配的文本组 1 完全相同。

https://regex101.com/r/zQ0hM2/2 的在线演示。

Python 会话演示:

>>> import re
>>> text = "l''''text'''"
>>> re.sub(r'''('+)([\w/-]+)\1''', r'\2', text)
"l'text"

【讨论】:

  • 一般用途(['"]+)((?:(?!\1).)*)\1
  • @AvinashRaj:但 OP 希望将引号之间的字符限制为单词字符、破折号和斜杠。
  • 我用过:'('+)([\w/-]+)\1'
  • @NicholasRoveda:[\w/-] 是拼写相同字符组的更简单方法。不需要转义正斜杠,如果你把破折号 last 它也不需要转义。我删除了双引号。引号不属于您的角色组,无需使用否定的向后查找来排除它们。
  • @NicholasRoveda:混合引用样式是一个非常不同的问题,不是一个用正则表达式那么容易解决的问题。然后我会使用一个完整的词法解析器。另外,这不是您在原始问题中提出的问题。 :-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多