捕获已知模式之前可能不在这里的所有内容

时间:2019-03-24 18:18:40

标签: python regex

给出这些示例字符串:

c

如何设置将输出的正则表达式:

str_1 = 'This will be captured (unwanted static pattern)'
str_2 = 'This wil also be captured'

到目前为止,我已经尝试过(使用不区分大小写的标志):

out_1 = 'This will be captured'
out_2 = 'This wil also be captured'

但是当模式不存在时,它不会捕获第一组。

我的确切问题是:我们如何传播“ *”,“ +”或“?”整个模式

2 个答案:

答案 0 :(得分:2)

您希望匹配尽可能短。将str()更改为(.*)。您还需要将(.*?)移动到可选的后缀内(否则,您要求匹配在非空空格序列之前结束)。

演示:https://ideone.com/195NIk

这似乎是自相矛盾的,直到您理解我们仍然意味着“最短的匹配仍将允许整个正则表达式匹配”。因此,当可选后缀不存在时,我们匹配从头到尾并且在该位置时,我们更喜欢一个不会​​一直持续到字符串结尾的匹配项。

答案 1 :(得分:0)

如果确定第一组中没有括号,则可以尝试([^\(]*)(?:\s+\(unwanted static pattern\))?$,并注意空格。