假设您有大字符串的文件。我有一个匹配这些字符串子集的模式,比如一个子字符串。如何在匹配的模式(例如子串)之后显示除去其他内容的所有字符串?这是正则表达式可能吗?在匹配的模式后删除其他所有内容
例如: “这是一个讨厌的字符串没有人喜欢”
我的模式: “讨厌的字符串”
预期结果: “这是一个讨厌的字符串”
假设您有大字符串的文件。我有一个匹配这些字符串子集的模式,比如一个子字符串。如何在匹配的模式(例如子串)之后显示除去其他内容的所有字符串?这是正则表达式可能吗?在匹配的模式后删除其他所有内容
例如: “这是一个讨厌的字符串没有人喜欢”
我的模式: “讨厌的字符串”
预期结果: “这是一个讨厌的字符串”
Perl语法(转换为您的语言标准)。
如果你想第一匹配您的子后,除去一切,那么你可以使用非贪婪匹配:
s/(^.*?substring).*$/$1/
如果你想最后比赛结束后,除去一切,那么通常贪婪的匹配就可以了:
s/(^.*substring).*$/$1/
刚用你的表达式替换子字符串。
您可以使用捕获组和反向引用。
例如,在Javascript:
"this is one nasty string nobody likes".replace(/(nasty string).*$/, '$1')
// => "this is one nasty string"
或者,你可以使用正向后断言,如果你正则表达式引擎支持它。
>>> # Python
>>> import re
>>> re.sub('(?<=nasty string).*$', '', "this is one nasty string nobody likes")
'this is one nasty string'
感谢您提供关键词“捕捉组”和“后退参考”,以便我可以去了解它是什么。 – 2014-11-22 03:32:10
正则表达式不会删除东西,它们只是匹配。你在比赛中所做的只是关于语言和手头上的方法,在匹配的对象/环境/任何方面。所以,你想要的东西匹配RE是
/\A.*nasty string/
随后又depennds的语言,在红宝石它可以
/\A.*nasty string/.match(candidate)[0]
(即返回所需要的字符串,而无需实际改变非破坏性的建设原来的)
你想在JS,PERL或其他语言中做到这一点? – 2014-11-22 00:45:30
@Godisgood语言无关紧要,只要它使用正则表达式即可。 – 2014-11-22 00:47:36