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组
(?:(?:和|或)|$)
匹配和
、或
或断言字符串结尾