我正在尝试构建一个组合的正则表达式,但我不知道如何组合这两个子表达式
- 我有一个这样的输入字符串: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$2
或12
(d+)_d+(.w+)
Regex演示
没有标记语言,但如果例如支持K
来清除匹配缓冲区,这可能也是一个选项(包括您尝试的部分(
在替换中使用空字符串。
[^_.]*K_[^._]+(?=.[^.]+$)
部件内
[^_.]*K
匹配下划线之前的部分,然后忘记到目前为止匹配的内容_[^._]+
匹配下划线,后跟除.
和_
之外的1个以上字符(?=.[^.]+$)
一个肯定的前瞻性断言,以确保右边的是一个.
,后面跟着除.
之外的任何字符,直到字符串结束
Regex演示