2014-11-22 57 views
-1

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

例如: “这是一个讨厌的字符串没有人喜欢”

我的模式: “讨厌的字符串”

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

+0

你想在JS,PERL或其他语言中做到这一点? – 2014-11-22 00:45:30

+0

@Godisgood语言无关紧要,只要它使用正则表达式即可。 – 2014-11-22 00:47:36

回答

1

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

如果你想第一匹配您的子后,除去一切,那么你可以使用非贪婪匹配:

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

如果你想最后比赛结束后,除去一切,那么通常贪婪的匹配就可以了:

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

刚用你的表达式替换子字符串。

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' 
+0

感谢您提供关键词“捕捉组”和“后退参考”,以便我可以去了解它是什么。 – 2014-11-22 03:32:10

1

正则表达式不会删除东西,它们只是匹配。你在比赛中所做的只是关于语言和手头上的方法,在匹配的对象/环境/任何方面。所以,你想要的东西匹配RE是

/\A.*nasty string/ 

随后又depennds的语言,在红宝石它可以

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

(即返回所需要的字符串,而无需实际改变非破坏性的建设原来的)

相关问题