我想匹配均匀匹配的双引号组之间的单词 and/or
I want to match the words and/or that are in between evenly matched sets of double quotes
我目前有正则表达式,在使用括号来包装组时可以正常工作
正则表达式
((?<!\()\b(and|or)\b(?![\w\s]*[\)]))/gi
字符串
合同类型是(展览和 a)和当事人名称是(珍珠和果酱)或滞纳金是15andparty name是(sonyorsons)
粗体和/或是我要匹配的。我不想匹配斜体。以上目前有效。
我试图使用双引号而不是 () 来获得上述结果,但没有取得任何进展。
正则表达式
((?<!\")\b(and|or)\b(?![\w\s]*[\"]))/gi
字符串
合同类型是“exhibit and a”,当事人名称是“pearl and jam”,或者滞纳金是 15,当事人名称是“sony or sons”
我没有找到匹配项,这对我来说很有意义,因为我的所有和/或都被引号包围。我的想法是以某种方式重构我的正则表达式以匹配和/或如果引号的左侧出现是奇数或右侧出现是偶数,但我还没有发现任何指向它的可能性。
任何帮助将不胜感激。随着我自己在正则表达式方面取得进展,我将继续 post 更新。
您的正则表达式匹配“and”或“or”,前提是该词不在字符串后面的 ")"
之前,并且其间的字符不包含字符 "("
(即,匹配 "("
必须在字符串之前,因此不应进行匹配)。这显然不能扩展到双(或单)引号,因为开始和结束引号是相同的字符。
你可以做的就是匹配正则表达式
"[^"]*"|\b(and|or)\b
让我们看看在示例字符串中匹配和捕获的内容。
'type is "exhibit and a" and name is "pearl and jam" or 15 and "sony or sons"'
mmmmmmmmmmmmmmm mmm mmmmmmmmmmmmmmm mm mmm mmmmmmmmmmmmmm
ccc cc ccc
匹配的字符串用'm'标记。捕获的字符串标有“c”。如您所见,我们只对捕获的字符串感兴趣。我们可以简单地忽略未捕获的匹配项。您当然必须在代码中做到这一点,但无论您使用何种语言,它都应该非常简单。
第一个匹配项从第一个 double-quote 开始并延伸到下一个 double-quote。该匹配项未被捕获。正则表达式引擎的字符串指针现在位于第二个双引号和后面的 space 之间。然后它尝试匹配 space 并失败。然后它成功匹配 and 捕获“and”,依此类推。
请注意,"[^"]*"
可以替换为 ".*?"
。后者是这样写的,“匹配 double-quote 后跟零个或多个字符,惰性地 (?
),后跟 double-quote”。惰性 (non-greedy) 匹配匹配 尽可能少的字符 .
我目前有正则表达式,在使用括号来包装组时可以正常工作
正则表达式
((?<!\()\b(and|or)\b(?![\w\s]*[\)]))/gi
字符串
合同类型是(展览和 a)和当事人名称是(珍珠和果酱)或滞纳金是15andparty name是(sonyorsons)
粗体和/或是我要匹配的。我不想匹配斜体。以上目前有效。
我试图使用双引号而不是 () 来获得上述结果,但没有取得任何进展。
正则表达式
((?<!\")\b(and|or)\b(?![\w\s]*[\"]))/gi
字符串
合同类型是“exhibit and a”,当事人名称是“pearl and jam”,或者滞纳金是 15,当事人名称是“sony or sons”
我没有找到匹配项,这对我来说很有意义,因为我的所有和/或都被引号包围。我的想法是以某种方式重构我的正则表达式以匹配和/或如果引号的左侧出现是奇数或右侧出现是偶数,但我还没有发现任何指向它的可能性。
任何帮助将不胜感激。随着我自己在正则表达式方面取得进展,我将继续 post 更新。
您的正则表达式匹配“and”或“or”,前提是该词不在字符串后面的 ")"
之前,并且其间的字符不包含字符 "("
(即,匹配 "("
必须在字符串之前,因此不应进行匹配)。这显然不能扩展到双(或单)引号,因为开始和结束引号是相同的字符。
你可以做的就是匹配正则表达式
"[^"]*"|\b(and|or)\b
让我们看看在示例字符串中匹配和捕获的内容。
'type is "exhibit and a" and name is "pearl and jam" or 15 and "sony or sons"'
mmmmmmmmmmmmmmm mmm mmmmmmmmmmmmmmm mm mmm mmmmmmmmmmmmmm
ccc cc ccc
匹配的字符串用'm'标记。捕获的字符串标有“c”。如您所见,我们只对捕获的字符串感兴趣。我们可以简单地忽略未捕获的匹配项。您当然必须在代码中做到这一点,但无论您使用何种语言,它都应该非常简单。
第一个匹配项从第一个 double-quote 开始并延伸到下一个 double-quote。该匹配项未被捕获。正则表达式引擎的字符串指针现在位于第二个双引号和后面的 space 之间。然后它尝试匹配 space 并失败。然后它成功匹配 and 捕获“and”,依此类推。
请注意,"[^"]*"
可以替换为 ".*?"
。后者是这样写的,“匹配 double-quote 后跟零个或多个字符,惰性地 (?
),后跟 double-quote”。惰性 (non-greedy) 匹配匹配 尽可能少的字符 .