如何定义匹配所有以双引号("
)开头的字符串的Python正则表达式,包含所有可打印字符(ASCII 32-126)并以双引号结束("
)?
答案 0 :(得分:1)
回答您的问题:
要仅针对abc
执行此操作,您必须编写一个正则表达式:"以"
开头,然后是什么;最终a
,然后是什么,最终b
,然后是什么,最终c
,然后是什么,最后是"
;或者b
,然后是什么,最终是a
,然后是什么,最终是c
,然后是什么......" - 依此类推,适用于所有3! = 6
个排列。
# declarative
regex = '^".*(a.*b.*c|a.*c.*b|b.*a.*c|b.*c.*a|c.*a.*b|c.*b.*a).*"$'
# generative
import itertools
regex = '^".*('
regex += '|'.join('.*'.join(p) for p in itertools.permutations('abc'))
regex += ').*"$'
但是,如果您尝试对所有可打印字符执行此操作,则可能会因内存(126-32)! = 108736615665674308027365285256786601004186803580182872307497374434045199869417927630229109214583415458560865651202385340530688000000000000000000000
而耗尽内存。所以......
解决您的问题:
printables = {chr(i) for i in range(32, 127)}
def f(s):
return s.startswith('"') and s.endswith('"') and printables < set(s)