首页 > 解决方案 > 如何使用正则表达式匹配随机出现的字符串集

问题描述

有一组字符串:

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

它以随机顺序出现在文本中,但数字首先出现:

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

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

标签: regex

解决方案


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

  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

推荐阅读