使用逻辑"and"运算符组合两个正则表达式



我正在尝试构建一个组合的正则表达式,但我不知道如何组合这两个子表达式

  • 我有一个这样的输入字符串:4711_001.doc
  • 要匹配以下内容:4711.doc
  • 我能够将4711与以下表达式匹配:[^_.]*
  • 我可以将.prt与此解压缩进行匹配:.[^.]+

是否有某种逻辑AND来组合这两个表达式并匹配4711.doc?这个表情会是什么样子?

您可以使用组在一个正则表达式中执行此操作。查看此代码以供参考:

import re
s = "4711_001.doc"
match = re.search(r"(.+?)_d+(..+)", s)
print(match.group(1) + match.group(2))

输出:

4711.doc

另一种可能性是匹配您不想要的零件:

_d+

并将其替换为"":

import re
s = "4711_001.doc"
match = re.sub(r"_d+", "", s)
print(match)

查看在线演示

对于这个示例字符串4711_001.doc,使用[^_.]*.[^.]+是一个非常广泛的匹配,因为它可以匹配除字符类中列出的字符之外的任何字符。

也许您可以使模式更加具体,在开头匹配数字,并将单词字符作为扩展名。

在替换使用中,捕获组1和2,通常表示为$1$212

(d+)_d+(.w+)

Regex演示

没有标记语言,但如果例如支持K来清除匹配缓冲区,这可能也是一个选项(包括您尝试的部分(

在替换中使用空字符串。

[^_.]*K_[^._]+(?=.[^.]+$)

部件内

  • [^_.]*K匹配下划线之前的部分,然后忘记到目前为止匹配的内容
  • _[^._]+匹配下划线,后跟除._之外的1个以上字符
  • (?=.[^.]+$)一个肯定的前瞻性断言,以确保右边的是一个.,后面跟着除.之外的任何字符,直到字符串结束

Regex演示

最新更新