如何将以随机顺序出现的一组字符串与正则表达式匹配

时间:2019-02-06 18:42:00

标签: regex

有一组字符串:

"foo","bar","baz", "boo", "123"

出现在文本中的顺序是随机的,但是数字出现在最前面:

Some text
     123 baz bar foo
     123 bar baz foo
     123 foo baz bar
Some other text

如何使用正则表达式匹配它们出现的行?

1 个答案:

答案 0 :(得分:1)

要执行此任务,您可以尝试使用屏蔽方法:

  1. 屏蔽包含重复项的行,因为此类行应被排除。然后,您可以根据需要删除它们。
  2. 匹配包含集合中单词的所有行。

因此,示例文本:

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