在Python中定义字符串时,它的前缀可以是任意顺序的字母b
,r
和u
,大写或小写的任意混合,如只要每个字母中最多有一个字母,b
和u
就不会出现在一起。然后是[{1}},'
,"
或'''
。
我有兴趣制作一个正则表达式来捕获字符串的开头,直到开头的引号。示例匹配:
"""
这些中的每一个都应该匹配。
如何编写正则表达式来匹配这些?
答案 0 :(得分:1)
正则表达式不能以任何顺序执行任何一个",因此我们必须预先生成可能的前缀组合。
幸运的是,我们可以使它不区分大小写,我们可以将引号标记作为单独的表达式;我们最终
import re
reg = re.compile("((?:b|u|r|br|ur|rb|ru)?(?:\'(?:\'\')?|\"(?:\"\")?))", re.I)
我们可以测试
def test_reg():
good_tests = ["br'", "'", 'r"""', "Ur'", 'B"', '"']
for t in good_tests:
assert reg.match(t).group(0) == t, "Failed good test {}".format(t)
bad_tests = ["bU'", "bb'", 'Uru"']
for t in bad_tests:
assert reg.match(t) is None, "Failed bad test {}".format(t)
答案 1 :(得分:0)
您可以像这样指定正则表达式字符串:
r'regex(string|String)$'
这是我在python中用来做正则表达式的一些代码:
string = "hello world"
match = re.search(r'(l{2})', string)
print str(match.groups())