我正在循环文本文件中的行,并想要检测一行文本:
See Also: something.m, something_else.m
关键是See Also
部分
See Also
不区分大小写See Also
前面可以加空格See Also
后面可以跟空格See Also
前面不能有任何其他非空格文本,例如我希望foobar blahblah See Also
无法匹配。除了空格See Also
之前有任何内容
See Also
可以选择后跟分号':'然后是更多的空格See Also
,或See Also:
或See Also :
等可以选择在空格后跟随更多文字,只要在'o'或'后面至少有一个空白字符: “我有大部分正则表达式,问题是检测See Also
之前是否有文本。以下是我的尝试(在matlab / Octave代码中)。但是,它支持标准的正则表达式(据我所知),包括前瞻和后瞻。
[start_idx, end_idx, extents, match] = ...
regexp ('See Also ', '(?<!\S*)\s*See\sAlso\s*[:]?\s*(\s[A-Za-z0-9_\.]*)?\s*$', 'ignorecase', 'once')
所以实际的正则表达式尝试是
(?<!\S*)\s*See\sAlso\s*[:]?\s*(\s[A-Za-z0-9_\.]*)?\s*$
上述内容无法匹配See Also
任何人都可以提出问题吗?
答案 0 :(得分:1)
答案 1 :(得分:1)
下面的模式使用mi
标志(在全局g
标志之上)
^[ \t]*see also[ \t]*:?[ \t]+(.*)
^
在行首处断言位置[ \t]*
匹配任意数量的空格或制表符see also
按字面意思匹配(i
标志不区分大小写匹配模式中字母的大写变体)[ \t]*
匹配任意数量的空格或制表符:?
可选择与:
字面匹配[ \t]+
匹配一个或多个空格或制表符(.*)
将任意字符捕获到捕获组1 正如在评论中指出的那样,字符串see also :something.m, something_else.m
不应该被模式捕获(冒号后缺少空格)。下面的模式纠正了这个问题。
^[ \t]*see also(?:[ \t]*:)?+[ \t]+(.*)
(?:[ \t]*:)?+
可选择匹配而不放弃匹配作为引擎回溯(占有)