Regex 如何使用被忽略的单词作为匹配的分隔符

Regex 如何使用被忽略的单词作为匹配的分隔符,regex,Regex,我正在分析以下格式的查询字符串: Product:123 or Price:>50 or Price:<100 但是,现在我遇到了一些查询字符串中可以包含带空格的单词的情况,例如: New Price:456 or Product Type:Video Game 我需要的匹配项是:新价格:456,产品类型:电子游戏 匹配项的分隔符将始终为单词AND或or。我看了一些与我的问题相似的其他问题,它们似乎都使用了消极前瞻,但我很难让它对我起作用 我尝试使用负前瞻来匹配除AND或or之外

我正在分析以下格式的查询字符串:

Product:123 or Price:>50 or Price:<100
但是,现在我遇到了一些查询字符串中可以包含带空格的单词的情况,例如:

New Price:456 or Product Type:Video Game
我需要的匹配项是:新价格:456,产品类型:电子游戏

匹配项的分隔符将始终为单词AND或or。我看了一些与我的问题相似的其他问题,它们似乎都使用了消极前瞻,但我很难让它对我起作用


我尝试使用负前瞻来匹配除AND或or之外的所有内容。

您可以尝试此操作。
\s*((?:(?!AND | or)。*)\s


你可以试试这个。
\s*((?:(?!and | or)。*)\s


您正在寻找的正则表达式:

(.+?)(?: or | and |$)
这将匹配长度为1或更多的文本,直到找到第一个
或字符串的结尾

在Python这样的语言中,您可以像这样获取所有匹配项:

re.findall('(.+?)(?: or | and |$)', 'New Price:456 or Product Type:Video Game')
在这里玩一下:

由于您建议捕获
(以及
),因此可能需要使其不区分大小写:

(?i)(.+?)(?: or | and |$)

如果您的语言支持这样的正则表达式,请查找其他语言的参考。

您要查找的正则表达式:

(.+?)(?: or | and |$)
这将匹配长度为1或更多的文本,直到找到第一个
或字符串的结尾

在Python这样的语言中,您可以像这样获取所有匹配项:

re.findall('(.+?)(?: or | and |$)', 'New Price:456 or Product Type:Video Game')
在这里玩一下:

由于您建议捕获
(以及
),因此可能需要使其不区分大小写:

(?i)(.+?)(?: or | and |$)

如果您的语言支持这样的正则表达式,请查找其他语言的引用。

您可以匹配冒号前面的单词,而不是空格字符或冒号。然后在空格前重复0+次

在模式的末尾,匹配
或断言字符串的结尾

匹配项将位于第一个捕获组中

([^:\s]+(?: [^\s:]+)*:[^:\s]+(?: [^\s:]+)*)(?: (?:and|or)|$)
解释

  • 捕获组1
    • [^:\s]+
      匹配1+次而不是空格字符或
    • (?:[^\s:]+)*
      重复0+次匹配空格,再次重复+次不匹配空格字符或
    • 逐字匹配
    • [^:\s]+(?:[^\s:]+)*
      与前面的模式相同:
  • 关闭第1组
  • (?:(?:和|或)|$)
    匹配
    或断言字符串结尾

  • 您可以匹配冒号前面的单词,而不是空格字符或冒号。然后在空格前重复0+次

    在模式的末尾,匹配
    或断言字符串的结尾

    匹配项将位于第一个捕获组中

    ([^:\s]+(?: [^\s:]+)*:[^:\s]+(?: [^\s:]+)*)(?: (?:and|or)|$)
    
    解释

    • 捕获组1
      • [^:\s]+
        匹配1+次而不是空格字符或
      • (?:[^\s:]+)*
        重复0+次匹配空格,再次重复+次不匹配空格字符或
      • 逐字匹配
      • [^:\s]+(?:[^\s:]+)*
        与前面的模式相同:
  • 关闭第1组
  • (?:(?:和|或)|$)
    匹配
    或断言字符串结尾