引用可打印字符的Python正则表达式

时间:2017-12-24 14:00:44

标签: python regex

如何定义匹配所有以双引号(")开头的字符串的Python正则表达式,包含所有可打印字符(ASCII 32-126)并以双引号结束(")?

1 个答案:

答案 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)