有一组字符串:
"foo","bar","baz", "boo", "123"
出现在文本中的顺序是随机的,但是数字出现在最前面:
Some text
123 baz bar foo
123 bar baz foo
123 foo baz bar
Some other text
如何使用正则表达式匹配它们出现的行?
答案 0 :(得分:1)
要执行此任务,您可以尝试使用屏蔽方法:
因此,示例文本:
Some text
123 baz bar foo
123 bar baz foo
123 foo baz bar
123 foo baz bar foo boo
123 foo bar bar
123 boo baz foo asdf
Some other text
首先,我们应使用以下正则表达式搜索包含行的重复项:
(^.*(foo|bar|baz|boo|123).*\2)
先前的意思是:从行的开头开始获取一个文本,该文本至少包含一个重复单词,该单词以匹配的重复单词结尾。
然后使用正则表达式替换掉这些行:
#SHIELD#\1
我们将获得以下文本:
Some text
123 baz bar foo
123 bar baz foo
123 foo baz bar
#SHIELD# 123 foo baz bar foo boo
#SHIELD# 123 foo bar bar
123 boo baz foo asdf
Some other text
或根据需要删除这些行。
然后,我们将能够从其余部分中获得所需的行。让我们用替换标记它们:
查找:^(?!#SHIELD#)(\s*123.*(baz|bar|foo|boo).*)$
(仅搜索以空格,123开头的非屏蔽行,然后搜索与集合中至少一个匹配项的任何文本)。
替换为:#MYLINE#\1
我们收到文本:
Some text
#MYLINE# 123 baz bar foo
#MYLINE# 123 bar baz foo
#MYLINE# 123 foo baz bar
#SHIELD# 123 foo baz bar foo boo
#SHIELD# 123 foo bar bar
#MYLINE# 123 boo baz foo asdf
Some other text