我需要匹配一个正则表达式,它包含一个来自变量的文本组件。
变量中包含的字符向量很长,并且可以包含作为运算符、量词、元字符等的字符,这些字符在MatLab的正则表达式引擎中。
有没有办法按原样匹配该文本组件?
使用strfind()
并不理想,因为我想要的匹配包括文本组件之前的一些模式、文本组件的精确匹配以及文本组件之后的一些模式。文本可以自己匹配,但匹配前后的组件会很不方便。
举个例子(不一定能完全反映其不便之处):
pat_b='%%\s+(?<name1>abc\d{6})\s+'; % pattern before
txt='asdf(1).qwer=[123:456,789]; zxcv;'; % text from variable
pat_a='\s+%%\s+(?<name2>\w{6})'; % pattern after
我试着用
f_txt=@()txt;
expression=[pat_b,'(??@f_txt())',pat_a];
regexp(txt_to_search,expression,'names'),
但找不到正确的匹配。最有可能的是,读取f_txt()
的结果时没有转义特殊字符。
1条答案
按热度按时间2admgd591#
有两种使用
pattern
功能的方法来解决这种情况:1.使用strfind()返回字符串中匹配的位置
1.使用extract()以字符串形式返回匹配文本
pattern
特性允许您为strfind()、提取()和其他函数创建复杂的匹配需求。以下是使用问题示例的简化版本的示例:如果不匹配,两种方法都返回空值,因此您可以使用isempty()测试匹配。这两种方法都不修改输入字符串,因此您可以组合使用它们。
请注意,
pattern
和相关函数(如extract()
)是在R2020b版本中引入的一种新功能,因此这些方法在早期版本中不起作用。