我习惯使用re.sub()
来替换字符串中的字母,但是只是插入一些东西呢?
import re
re.sub('Item', '- <thing>', 'A list of things: \nItem 1 \nItem 2')
应该返回
"A list of things: \n- Item 1 \n- Item 2"
它并没有真正替代,而是插入了一些东西。这在regex中实际上是可行的还是我应该坚持循环遍历整个文本并使用.replace()
?我需要替换特定事物的模式,因此使用大量.replace()
似乎有点不优雅。
答案 0 :(得分:2)
您正在寻找“反向引用”。它们通常拼写为\X
,其中“X”是您要引用的捕获组的编号(尽管您也可以使用命名捕获组,如果您想获得更多花哨的话)。
以下是如何使代码正常工作:
re.sub(r'(Item)', r'- \1', 'A list of things: \nItem1, \nItem2')
答案 1 :(得分:0)
为什么不制作第二个参数- Item
?
>>> re.sub('Item', '- Item', 'A list of things: \nItem 1 \nItem 2')
'A list of things: \n- Item 1 \n- Item 2'
答案 2 :(得分:0)
这是一种奇特的方式,对于幻想的倾向:
import re
re.sub('(?=Item)', '- ', 'A list of things: \nItem 1 \nItem 2')
#>>> 'A list of things: \n- Item 1 \n- Item 2'
这会搜索(?=Item)
,Item
后面的空字符串跟随,并将其替换为-
。
请注意,在现实生活中,这应该拼写:
'A list of things: \nItem 1 \nItem 2'.replace('Item', '- Item')
虽然我认为这只是'因为这过于简单。
答案 3 :(得分:0)
此代码可以正常工作:
import re
text = re.sub(r'(Item)', '- \g<1>', 'A list of things: \nItem 1 \nItem 2')
print text
祝你好运!