繁体   English   中英

为什么此正则表达式在此字符串中不匹配?

[英]Why doesn't this regular expression match in this string?

我希望能够使用正则表达式替换文件中的字符串。 但是我的功能找不到匹配项。 所以我模拟了一个测试来复制正在发生的事情。

我已经定义了要替换的字符串,如下所示:

string = 'buf = O_strdup("ONE=001&TYPE=PUZZLE&PREFIX=EXPRESS&");'

我想用其他东西代替“ TYPE = PUZZLE&PREFIX = EXPRESS&”部分。 NB。 该字符串在原始文件中并不总是完全包含“ PUZZLE”和“ PREFIX”,但是将采用该格式)。

因此,首先我尝试测试是否获得正确的匹配。

 obj = re.search(r'TYPE=([\^&]*)\&PREFIX=([\^&]*)\&', string)
 if obj:
    print obj.group()
 else:
    print "No match!!"

认为([\\^&]*)可以匹配任意数量的非与号字符。 但是我总是得到“没有比赛!”。

但是, obj = re.search(r'TYPE=([\\^&]*)', string)

返回我“ TYPE =“

为什么我的第一个不工作?

由于^符号用\\进行转义,因此以下部分: ([\\^&]*)匹配以下字符的任何序列:^,&。

尝试将其替换为([^&]*)

在我的正则表达式测试器中,它确实起作用: 'TYPE=(.*)\\&PREFIX=(.*)\\&'

试试这个

obj = re.search(r'TYPE=(?P<type>[^&]*?)&PREFIX=(?P<prefix>[^&]*?)&', string)

?P<some_name>是一个命名的捕获组,使访问捕获的组obj.group("type") -->> 'PUZZLE'更加容易

最好使用函数urlparse.parse_qsl()urllib.urlencode()代替正则表达式。 该代码将不那么容易出错:

from urlparse import parse_qsl
from urllib import urlencode
s = "ONE=001&TYPE=PUZZLE&PREFIX=EXPRESS&"
a = parse_qsl(s)
d = dict(TYPE="a", PREFIX="b")
print urlencode(list((key, d.get(key, val)) for key, val in a))
# ONE=001&TYPE=a&PREFIX=b

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM