regex - 如何使用正则表达式匹配随机出现的字符串集
问题描述
有一组字符串:
"foo","bar","baz", "boo", "123"
它以随机顺序出现在文本中,但数字首先出现:
Some text
123 baz bar foo
123 bar baz foo
123 foo baz bar
Some other text
如何使用正则表达式匹配它们出现的行?
解决方案
要执行该任务,您可以尝试屏蔽方法:
- 屏蔽包含重复项的行,因为应排除此类行。然后,您可以根据需要删除它们。
- 匹配包含集合中单词的所有行。
所以,一个示例文本:
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
推荐阅读
- cloudkit - 如何在系统设置页面更改 CloudKit displayName?
- c++ - 特化具有多个值和相同特化的非类型模板函数
- javascript - 按指定顺序对对象属性进行排序
- django - 如何在 django 中测试自定义身份验证后端
- typescript - 如何在不重写变量的情况下更改 TypeScript 中的变量类型?
- javascript - 使用 cronjob 运行脚本时缺少 Puppeteer
- javascript - 未捕获的 TypeError:response.json 不是 HTMLButtonElement 的函数
- symfony - 为什么 CORS 策略仅在我转储时才阻止请求?
- java - 想问用户画出多少步,打印出多少步。我该怎么做?
- java - 是否可以从 java 中的 If 语句中抛出异常?