当我的文字有单引号时,模式会失败。
我试图用\\Q
和\\E
来解决它,就像在Perl中那样但是编译模式失败了。
e.g。
用于模式"(?i)Name is\\b(\\w+)\\b"
如果文字是"My name is Foampile X"
,我会得到一个匹配。但对于"My name is 'Foampile'"
我没有得到匹配。
如果像任何其他角色一样将单引号视为单引号,我该怎么办?
答案 0 :(得分:1)
我发现在任何情况下你得到一个匹配都很奇怪,因为你在Foampile
之前忽略了这个空格(\b
不消耗一个字符)。请注意,\w
与引号不匹配,只与[a-zA-Z0-9_]
匹配。因此,根据您是否要包含引号,您可以尝试其中一种:
"(?i)Name is\\W+(\\w+)"
or
"(?i)Name is\\W+?('?\\w+'?)"
如果你想声明这个名字只用一个空格分隔,不论引用与否,都可以简化为:
"(?i)Name is '?(\\w+)'?"
or
"(?i)Name is ('?\\w+'?)"
如果您的问题实际上意味着您只是在没有引号的情况下进行测试,但您的实际目标是仅接受引号中的名称,则可以忽略?
后面的所有'
{ {1}}。
然而,第一个变体将起作用,无论任何非单词字符与句子的其余部分界定名称。
答案 1 :(得分:-1)
\w
字符类是任何字母。您将需要扩展您的正则表达式以包含其他可能性:
"Name is [\w']+"
这为正则表达式提供了一组可能的扩展值,包括字母或引号。但是,强制使用正确引用的名称并不精确。这看起来更像是:
"Name is ['"]?[\w']+['"]?"