我目前正在编写一个使用框架来匹配某些短语的应用程序,目前它应该匹配以下正则表达式模式:
Say "Hello world!" <-- Matches
Say “Hello world!” <-- Doesn't match!
但是,我注意到我的用户抱怨他们的操作系统有时会复制并粘贴“引号”&#39;在最终发生的事情是用户提供以下句子:
u'Say (?:["“”])(.*)(?:["“”])'
# (?:["“”]) <-- Start non-capturing group, and match one of the three possible quote typesnot return it
# (.*) <-- Start a capture group, match anything and return it
# (?:["“”]) <-- Stop matching the string until another quote is found
有什么方法可以告诉Python的正则表达式将这些引号与常规引号相同?
事实证明,您可以非常轻松地告诉Python使用unicode字符串读取您的正则表达式,我将我的代码更改为以下内容并且它有效:
if(textField.keyboardType == UIKeyboardTypeNumbersAndPunctuation)
{
NSString *validRegEx =@"^[0-9.]*$"; //change this regular expression as your requirement
NSPredicate *regExPredicate =[NSPredicate predicateWithFormat:@"SELF MATCHES %@", validRegEx];
BOOL myStringMatchesRegEx = [regExPredicate evaluateWithObject:string];
if (myStringMatchesRegEx)
return YES;
else
return NO;
}
答案 0 :(得分:4)
你可以在正则表达式中包含引号:
Say [\"“”](.*)[\"“”]
作为可以在Python repl中复制的东西,它是这样的:
>>> import re
>>> test_str = r'"Hello"'
>>> reg = r'["“”](.*)["“”]'
>>> m = re.search(reg, test_str)
>>> m.group(1)
'Hello'
>>> test_str = r'“Hello world!”'
>>> m = re.search(reg, test_str)
>>> m.group(1)
'\x80\x9cHello world!\xe2\x80'
答案 1 :(得分:1)
作为Kyle答案的替代方案,您可以通过替换引号来为当前正则表达式准备字符串:
string.replace('“', '"').replace('”', '"')