我想设计一个正则表达式,可以匹配双引号括起来的字符 [].\,();~- .
[].\,();~-
例如,这个字符串:
do Output.printString("Test 1: expected result: 5; actual result: ");
应该返回匹配:
['.', '(', ')', ';']
我尝试使用负向前瞻和负面观察无济于事 .
我们可以做类似的事情 -
Remove text inside double quotes
import re pattern = u"[\"].*?[\"]" text = 'do Output.printString("Test 1: expected result: 5; actual result: ");' new_text = re.sub(ptrn, '', text) # O/P 'do Output.printString();'
Match all characters you need
pattern_2 = u"[\[\]\.\,\(\)\;\~\-]" matches = re.findall(pattern2, new_text)
O/P ['.', '(', ')', ';']
您需要两个步骤,因为Python正则表达式不够强大,无法一次完成 .
re.findall(r'[\[\].\\,();~-]', re.sub(r'"(?:\\.|[^"\\])*"', '', s)) # => ['.', '(', ')', ';']
内部 re.sub 删除所有双引号字符串(忽略转义的双引号);然后你可以使用 re.findall 轻松拿起你想要的东西 .
re.sub
re.findall
您可以将此正则表达式与前瞻一起使用,以确保匹配双引号对外的符号:
>>> s = 'do Output.printString("Test 1: expected result: 5; actual result: ");' >>> print re.findall(r'[][.,();~-](?=(?:(?:[^"]*"){2})*[^"]*$)', s) ['.', '(', ')', ';']
RegEx Demo
这个正则表达式将拆分给定的特殊字符,如果它们在双引号之外,则使用前瞻以确保在匹配的字符后有偶数引号 .
(?:[^"]*"){2} 找到一对引号
(?:[^"]*"){2}
(?:(?:[^"]*"){2})* 找到0个或更多这样的对
(?:(?:[^"]*"){2})*
[^"]*$ 确保我们在最后一个匹配的报价后没有任何报价
[^"]*$
3 回答
我们可以做类似的事情 -
Remove text inside double quotes
Match all characters you need
O/P
['.', '(', ')', ';']
您需要两个步骤,因为Python正则表达式不够强大,无法一次完成 .
内部
re.sub
删除所有双引号字符串(忽略转义的双引号);然后你可以使用re.findall
轻松拿起你想要的东西 .您可以将此正则表达式与前瞻一起使用,以确保匹配双引号对外的符号:
RegEx Demo
这个正则表达式将拆分给定的特殊字符,如果它们在双引号之外,则使用前瞻以确保在匹配的字符后有偶数引号 .
(?:[^"]*"){2}
找到一对引号(?:(?:[^"]*"){2})*
找到0个或更多这样的对[^"]*$
确保我们在最后一个匹配的报价后没有任何报价