首页 > 解决方案 > 正则表达式。是否可以相对于另一个元素设置条件但不匹配它

问题描述

使用 python 3.8 我有一个这样的字符串。

**TEXT** * TEXT * *TEXT* ***TEXT*** fg**TEXT**fgh*TEXT*ghjf***TEXT***g//*TEXT*//**TEXT**//

我只需要找到最后一个*。像 *TEXT *,但不是在这里***TEXT***

但我无法设置与此 *. 我的条件太相似了。

(?<![*]{1})(?<=\w|\s)[*]{1}(?![*]) 在图片上做什么

那么,是否可以相对设置一个正则表达式,例如*TEXT * 但然后以某种方式将其更改为我的情况。

标签: pythonpython-3.xregex

解决方案


您可以断言直接在左侧的是单个*后跟可选空白字符之间的单词字符。

然后匹配*并断言*右边没有。

要在后向断言中使用量词,您可以使用PyPy 正则表达式模块

(?<=(?<!\*)\*\s*\w+\s*)\*(?!\*)

解释

  • (?<=正向向后看,断言直接在左边的是
    • (?<!\*)\*A*不直接前置*
    • \s*\w+\s*匹配由可选空格字符包围的 1+ 个单词字符
  • )近距离观察
  • \*匹配*
  • (?!\*)负前瞻,断言直接向右的不是*

正则表达式演示

使用带有 re 模块的捕获组,您还可以使用:

(?<!\*)\*\s*\w+\s*(\*)(?!\*)

正则表达式演示


推荐阅读