匹配模式后删除其他所有内容

时间:2014-11-22 00:29:10

标签: regex

假设您有包含字符串的大文件。我有一个模式匹配这些字符串的子集,比如一个子字符串。如何在匹配的模式(例如子字符串)后删除之后显示其他所有字符串?这是否可以使用正则表达式?

实施例: "这是一个令人讨厌的字符串,没人喜欢"

我的模式: "讨厌的字符串"

预期结果: "这是一个讨厌的字符串"

3 个答案:

答案 0 :(得分:1)

您可以使用捕获组和反向引用。

例如,在Javascript中:

"this is one nasty string nobody likes".replace(/(nasty string).*$/, '$1')
// => "this is one nasty string"

或者,如果正则表达式引擎支持它,则可以使用正向lookbehind断言。

>>> # Python
>>> import re
>>> re.sub('(?<=nasty string).*$', '', "this is one nasty string nobody likes")
'this is one nasty string'

答案 1 :(得分:1)

Perl语法(转换为您的语言标准)。

如果要在子字符串的第一次匹配后删除所有内容,则可以使用非贪婪匹配:

s/(^.*?substring).*$/$1/

如果你想在最后匹配后删除所有内容,那么通常的贪婪匹配就会:

s/(^.*substring).*$/$1/

只需用你的表达式替换substring。

答案 2 :(得分:1)

正则表达式不会删除内容,只是匹配。然后你用匹配做的只是关于你手头的语言和方法,匹配的对象/环境/无论如何。所以你想要的匹配RE是

/\A.*nasty string/

然后它再次依赖于语言,在ruby中它可以是

/\A.*nasty string/.match(candidate)[0]

(非破坏性构造,返回所需的字符串而不实际更改原始字符串)