2012-08-09 167 views
0

Python不断返回一个带有破碎字符的字符串。python re.sub正则表达式

蟒蛇

test = re.sub('handle(.*?)', '<verse osisID="lol">\1</verse>', 'handle a bunch of random text here.') 
print test 

我想

<verse osisID="lol">a bunch of random text here.</verse> 

什么我得到

<verse osisID="lol">*broken character*</verse>a bunch of random text here. 

回答

8

您应该逃避\字符或使用r''原始字符串:

>>> re.sub('handle(.*?)', r'<verse osisID="lol">\1</verse>', 'handle a bunch of random text here.') 
'<verse osisID="lol"></verse> a bunch of random text here.' 

没有r''原始字符串文字,反斜杠被解释为转义码。您可以双击反斜杠以及:

>>> '\1' 
'\x01' 
>>> '\\1' 
'\\1' 
>>> r'\1' 
'\\1' 
>>> print r'\1' 
\1 

请注意,您只更换有字handle,该.*?模式以最低的0字符匹配。删除问号,它会符合您的预期输出:

>>> re.sub('handle(.*)', r'<verse osisID="lol">\1</verse>', 'handle a bunch of random text here.') 
'<verse osisID="lol"> a bunch of random text here.</verse>' 
+0

你是一个美丽的人:) – user1442957 2012-08-09 19:48:28

+0

你可能想后的空间匹配'处理“,但在下一个单词之前,因为这会阻止'...> br ...'你可以用'handle *(。*)'来做这个假定你只有空格(不是其他空格) – 2012-08-09 19:51:16

+0

@AndrewCox:我会用'\ s *'来匹配那里的空白,为什么只限于空间? – 2012-08-09 19:54:14

0

下面的代码的python测试3.6

import re 

test = 'a bunch of random text here.' 
resp = re.sub(r'(.*)',r'<verse osisID="lol">\1</verse>',test) 
print (resp) 

<verse osisID="lol">a bunch of random text here.</verse>