Matlab regexp有没有或声明?

时间:2013-12-05 02:45:25

标签: regex matlab

嘿伙计们我试图找到一种方法来显示字母I,但我一直遇到麻烦这就是我到目前为止所做的事。

这是我打开的文本文件,toll​​s.txt:

Join Microsoft employees supporting I Inspire Youth Project and other youth causes #GivingHero: http://msft.it/6013jboz
Waze for @WindowsPhone is here: http://msft.it/6016jbp2 I

fid=fopen('tolls.txt');

getLine=fgetl(fid);

while ischar(getLine)

 ct='I\s';
 How=regexp(getLine,ct,'match');
 counter=counter+length(How);
 getLine=fgetl(fid);

end

我的问题是因为我必须在I任何时候合并我必须能够显示所有独立的大写I之后没有空格,例如一句话和一句话。所以在我的bat变量中我有bat = I\s但是我不知道是否有一个或者我可以使用的语句来合并\sI

希望我很清楚这个问题,谢谢你提前给予帮助。

2 个答案:

答案 0 :(得分:2)

你需要的是:

ct = '(?<!\w)(I)(?!\w)';

此处(?<!\w)(?!\w)分别表示字词类中的字符的负面后瞻和否定前瞻。

可以找到有关相同内容的更多信息here

答案 1 :(得分:0)

@RoneyMichael的解决方案很好(尽管可能有点矫枉过正),但有一个或声明。以下是您可以查找三种不同模式的方法 - ' I ''I '' I'

ct='(^I[\W]*\s)|(\sI[\W]*\s)|(\sI[\W]*$)';
How=regexp(getLine,ct,'match')

返回:

How = 

    ' I '    ' I'

如果最后两个模式分别出现在字符串的开头或结尾,则后两个模式特别匹配后者'I''[\W]*'匹配零个或多个非单词字符,即标点符号。由于诸如&#39; ...&#39;,&#39;?!&#39;等等,它可以为零或更多。或者,您可以使用类似的内容明确列出允许的标点符号{1}}而是(只记得引号,圆括号,括号等内容也可以出现在一行的末尾)。此外,您可能希望匹配'[\.\?\!]*''"I'。在这种情况下,您只需使用

''I'

您可以在正则表达式中使用other logical and conditional operators