gpt4 book ai didi

Python 2.6+ str.format() 和正则表达式

转载 作者:IT老高 更新时间:2023-10-28 21:08:14 25 4
gpt4 key购买 nike

使用 str.format() 是 Python 2.6 和 Python 3 中格式化字符串的新标准。使用 str.format() 时遇到问题code> 带有正则表达式。

我编写了一个正则表达式来返回比指定域低一级的所有域或比指定域低两级的任何域,如果下面的第二级是 www...

假设指定的域是delivery.com,我的正则表达式应该返回a.delivery.com、b.delivery.com、www.c.delivery.com ...但它不应该返回x.a.delivery.com。

import re

str1 = "www.pizza.delivery.com"
str2 = "w.pizza.delivery.com"
str3 = "pizza.delivery.com"

if (re.match('^(w{3}\.)?([0-9A-Za-z-]+\.){1}delivery.com$', str1): print 'String 1 matches!'
if (re.match('^(w{3}\.)?([0-9A-Za-z-]+\.){1}delivery.com$', str2): print 'String 2 matches!'
if (re.match('^(w{3}\.)?([0-9A-Za-z-]+\.){1}delivery.com$', str3): print 'String 3 matches!'

运行它应该会给出结果:

String 1 matches!
String 3 matches!

现在,问题是当我尝试使用 str.format 动态替换 delivery.com...

if (re.match('^(w{3}\.)?([0-9A-Za-z-]+\.){1}{domainName}$'.format(domainName = 'delivery.com'), str1): print 'String 1 matches!'

这似乎失败了,因为 str.format() 期望 {3}{1} 是功能。 (我假设)

我可以使用 + 运算符连接字符串

'^(w{3}\.)?([0-9A-Za-z-]+\.){1}' + domainName + '$'

问题归结为,当字符串(通常是正则表达式)中包含“{n}”时是否可以使用str.format()

最佳答案

您首先需要格式化字符串,然后使用正则表达式。将所有内容放在一行中确实不值得。转义是通过加倍花括号来完成的:

>>> pat= '^(w{{3}}\.)?([0-9A-Za-z-]+\.){{1}}{domainName}$'.format(domainName = 'delivery.com')
>>> pat
'^(w{3}\\.)?([0-9A-Za-z-]+\\.){1}delivery.com$'
>>> re.match(pat, str1)

另外,re.match在字符串的开头匹配,如果使用re.match就不用放^ code>,但是如果您使用 re.search,则需要 ^

请注意,正则表达式中的 {1} 相当多余。

关于Python 2.6+ str.format() 和正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1875676/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com