为什么我的带有r'string'的正则表达式匹配但使用Python不匹配'string'?

为什么我的带有r'string'的正则表达式匹配但使用Python不匹配'string'?,第1张

为什么我的带有r'string'的正则表达式匹配但使用Python不匹配'string'?

答案本身

regex = '|'.join([r'b' + str(state) + r'b' for state in states])

其背后的原因是’r’前缀告诉Python不要分析您传递给它的字符串。如果您未在字符串前添加“ r”,Python会尝试将“
”前面的任何字符转换为特殊字符,以允许您输入换行符( n),制表符( t)等容易。

当您这样做时

'b'
,您告诉Python创建一个字符串,对其进行分析,然后将’
b’转换为’退格’,而当您这样做时
r'b'
,Python则只存储了’'然后是’b’,这就是您想要的正则表达式。
对于用作正则表达式模式的字符串,始终使用“ r”。

“ r”表示法称为“原始字符串”,但这具有误导性,因为Python内部没有诸如原始字符串之类的东西。只是将其视为告诉Python避免过于智能的一种方法。

Python <3.0中有另一种表示法

u'string
,它告诉Python将字符串存储为unipre。您可以将两者结合使用:
ur"én"
将“
bé”存储为unipre,而
u"én"
将存储“é”然后换行。

改善代码的一些方法:

regex = '|'.join(r'b' + str(state) + r'b' for state in states)

删除了多余的部分

[]
。它告诉Python不要将正在生成的值列表存储在内存中。我们可以在这里进行 *** 作,因为我们不打算重复使用您正在创建的列表,因为您可以直接在自己的
join()
地方使用它,而在其他任何地方都可以使用它。

regex = '|'.join(r'b%sb' % state for state in states)

这将自动处理字符串转换,并且更短,更干净。在Python中格式化字符串时,请考虑%运算符。

如果州包含州邮政编码列表,则应将其存储为字符串而不是int。在这种情况下,您可以跳过类型转换并将其进一步缩短:

regex = r'b%sb' % r'b|b'.join(states)

最终,您可能根本不需要正则表达式。如果您只想

in
检查邮政编码中是否有一个在给定的字符串中,则可以使用(检查项目是否处于可迭代状态,例如字符串是否在列表中):

matches = [s for s in states if s in 'grand rapids, mi 49505']

遗言

我了解您在学习一门新语言时可能会感到沮丧,但请花些时间为您的问题加上适当的标题。在此网站上,标题应以问号结尾,并提供有关该问题的特定详细信息。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5646084.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存