我可以使用更少的字符来实现相同的正则表达式结果。寻求包含子串正则表达式

时间:2016-11-15 07:38:58

标签: regex

我使用的是Google工作表查询功能,其中包含正则表达式命令" MATCHES"。

如果Col2包含字符串dog,cat或fish中的任何一个,我需要对Col1求和。

这是我难看的解决方案,我想知道是否有更简洁的方法:

(.*)?dog(.*)?|(.*)?cat(.*)?|(.*)?fish(.*)?

在英语中,如果相关单元格包含或等于这三个字符串中的任何一个,则评估为true。任何一方都可能有也可能没有文字。

猫|狗|鱼在这种环境下不起作用。来自他们的documentation

  

匹配 - A(preg)正则表达式匹配。干草堆匹配针   如果针中的正则表达式与haystack匹配,则为true。   示例:国家/地区匹配'。* ia'匹配印度和尼日利亚,但是   不是印第安纳请注意,这不是全局搜索,所以国家/地区   匹配' an'不符合加拿大'

在这种情况下,如果我正确地阅读它们意味着它将不会匹配某些文本/ dogblabla;只是完全匹配。我不确定,但我的反复试验表明我的理解是正确的。

是否有更短的撰写方式(.*)?dog(.*)?|(.*)?cat(.*)?|(.*)?fish(.*)?

1 个答案:

答案 0 :(得分:1)

Google地图中的matches需要完整的字符串匹配,因此cat|dog|fish无效(请参阅Canada示例)。

您可以在使用搜索词的替换组之前使用延迟/贪婪点匹配模式,然后在以下后添加相同的构造:

.*(dog|cat|fish).*

这将匹配:

  • .* - 除了换行符之外的任何零个或多个(*)字符
  • (dog|cat|fish) - dogcatfish
  • .* - 任意零个或多个字符,直到该行的末尾。

如果输入包含换行符,您可以尝试将.替换为[\s\S],或在模式的开头添加(?s)