假设您有包含字符串的大文件。我有一个模式匹配这些字符串的子集,比如一个子字符串。如何在匹配的模式(例如子字符串)后删除之后显示其他所有字符串?这是否可以使用正则表达式?
实施例: "这是一个令人讨厌的字符串,没人喜欢"
我的模式: "讨厌的字符串"
预期结果: "这是一个讨厌的字符串"
答案 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]
(非破坏性构造,返回所需的字符串而不实际更改原始字符串)