使用正则表达式查找字符串中几个单词的实例数,同时忽略其他几个单词

Find number of Instances for few words in string while ignoring other few words using regex

嗨,我在 Matlab 中使用正则表达式。

我需要使用正则表达式查找几个词的命中数,同时忽略其他几个词

到目前为止我尝试了什么:

String = 'Sunday:Monday:Tuesday:Wednesday:Thursday:Friday:Saturday:Sun:Mon:Tue:Wed:,Thu:,Fri:,Sat:';
Output = regexp( String,'^(?!.*(,Sun:|,Sunday:)).*(Sun:|Sunday:)' )

上述正则表达式的输出为 true,但需要它作为 2,因为它得到 星期天:星期天打2次 :.

在下一个场景中:

String = 'Sunday:Monday:Tuesday:Wednesday:Thursday:Friday:Saturday:Sun:Mon:Tue:Wed:,Thu:,Fri:,Sat:';
Output = regexp( String,'^(?!.*(,Fri:|,Friday:)).*(Fri:|Friday:)' )

上述正则表达式的输出为 false,但需要它作为 1,因为它*** 被命中 1 次** * 星期五:.

我也试过:

regexp( String,'^(?!.*(,Sun:|,Sunday:)).*(Sun:|Sunday:)' ,'match')

但它给出的输出是整个字符串。 我很困惑如何在忽略其他词的同时获得命中数,希望能提供帮助 正则表达式在 Matlab 中的工作与正常情况相同。

您可以使用

(?<!,)Fri(?:day)?:

匹配

  • (?<!,) - 不紧跟 ,
  • 的位置
  • Fri - Fri
  • (?:day)? - 一个可选的 day 字符串
  • : - 一个冒号。

参见regex demo

如果允许一些冗余,您可以像这样构建模式:

(?<!,)(Fri:|Sunday:)

它将匹配 Fri:Sunday: 前没有逗号。

除非你真的需要使用正则表达式,否则这样的东西会更容易维护:

Output = sum(ismember(strsplit(String,':'),{'Sunday','Sun'}))