使用正则表达式查找字符串中几个单词的实例数,同时忽略其他几个单词
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'}))
嗨,我在 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'}))