【问题标题】:Match groups of words with any other words between using regex使用正则表达式将单词组与任何其他单词匹配
【发布时间】:2021-10-11 15:17:15
【问题描述】:

我有几组词。例如:

["foo", "bar", "baz"]
["hello", "world"]

现在我想要一个正则表达式,它可以检查这些词组是否按照它们在我的组列表中的顺序排列,并且我希望在组之前、组之间或之后允许任何数量的其他词.例如。我希望我的正则表达式匹配以下字符串:

"foo bar baz hey how do you do hello world"
"foo bar baz hello world"
"something cool foo bar baz maybe hello world"
"something cool foo bar baz maybe hello world amazing"

我正在动态构建正则表达式字符串。就我而言,这是我正在构建的内容:

"( \S+ )*foo bar baz( \S+ )*hello world( \S+ )*"

我希望 \S+ 匹配除空格以外的任何内容。

我希望( \S+ ) 可以匹配除两边被空格包围的空格以外的任何内容。

我希望( \S+ )* 可以匹配任意数量的被空格包围的单词。

但它并没有像我预期的那样工作。例如。在字符串中

"something cool foo bar baz maybe hello world amazing"

只有这部分被正则表达式匹配,而不是整个字符串

" cool foo bar baz maybe hello world "

我的正则表达式中缺少什么?

我在学习正则表达式并练习使用正则表达式处理一些现实世界的任务时问这个问题。

【问题讨论】:

  • 使用:.*?\bfoo bar baz\b.*?\bhello world\b.*

标签: regex


【解决方案1】:

使用( \S+ )* 匹配前后的空格,因此重复它会匹配例如两个连续的空格。

您可以做的是,在第一个单词列表之前省略开头的空格,在单词列表之间和之后省略空格,并在第一个和第二个列表之间添加一个空格。

(\S+ )*foo bar baz( \S+)* hello world( \S+)*
  • (\S+ )* 可选择重复 1+ 个非空白字符,后跟一个空格
  • foo bar baz匹配第一个单词列表
  • ( \S+)* 在列表之间,可选择重复一个空格和 1+ 个非空白字符,并在末尾添加一个空格
  • hello world匹配第二个单词列表
  • ( \S+)* 可选匹配尾随词

Regex demo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-10
    • 2015-09-24
    • 2017-10-27
    • 1970-01-01
    相关资源
    最近更新 更多