如何匹配两个逗号之间的所有内容?

时间:2019-08-01 04:39:46

标签: regex

我想基本上匹配任何以逗号分隔的工作日列表的文本。

(?i)(every (mon|tue|wed|thu|fri|sat|sun)[A-Za-z]{3,5}, .*+, 
(mon|tue|wed|thu|fri|sat|sun)[A-Za-z]{3,5})

以上是我所拥有的,我想使其与以下字符串匹配。如果只提供2个工作日,我不需要帮助。

Every mon, tue, wednesday
Every wed, Saturday, Friday, sun.

2 个答案:

答案 0 :(得分:2)

尝试模式:(?<=,|^)[^,\n]+

说明

(?<=,|^)-令人反感:断言前面是逗号,还是字符串^的开头

[^,\n]+-匹配一个或多个除逗号,或换行符\n之外的字符

Demo

答案 1 :(得分:0)

您可能会列出缩写词,并有选择地匹配全名,方法是使用英文字母和空格,并用逗号和空格隔开。

将其添加到组中,并重复0次以上。之后,添加没有逗号的组,以确保您至少匹配一天。

(?i)\bevery (?:(?:mon(?:day)?|tue(?:sday)?|wed(?:nesday)?|thu(?:rsday)?|fri(?:day)?|sat(?:urday)?|sun(?:day)?), )*(?:mon(?:day)?|tue(?:sday)?|wed(?:nesday)?|thu(?:rsday)?|fri(?:day)?|sat(?:urday)?|sun(?:day)?)\b

说明

  • (?i)\bevery不区分大小写的修饰符
  • (?:没有捕获组
    • (?:mon(?:day)?|tue(?:sday)?|wed(?:nesday)?|thu(?:rsday)?|fri(?:day)?|sat(?:urday)?|sun(?:day)?), 匹配任何列出的内容,后跟逗号和空格
  • )*关闭非捕获组并重复0次以上
  • (?:非捕获组
    • mon(?:day)?|tue(?:sday)?|wed(?:nesday)?|thu(?:rsday)?|fri(?:day)?|sat(?:urday)?|sun(?:day)?匹配列出的任何一个
  • )\b关闭非捕获组并添加单词边界以防止成为较大单词的一部分

Regex demo

要只匹配几天,您可以将第一个非捕获组的* quantifier更新为+{2,}