我如何在文本中搜索字符串并在其后面添加另一个字符串,如下所示:
我想在文本中搜索“John 3 2 G”,如果它在那里我想在其后添加字符串
I met John 3 2 G yesterday and..
运行程序后
I met John 3 2 G and his brother yesterday and..
要知道这些数字不是固定的,它们是数字但可以改变
我使用了re.sub
,但在这种情况下,当数字发生变化时我该怎么办?
我的尝试:
re.sub("John","John and his brother",text)
答案 0 :(得分:0)
既然你知道他们会成为数字但你不确定数字是什么,你可以使用
text = re.sub(r'(\w+ \d+ \d+ \w+)',r'\1 and his brother',text)
这应该取代"I met <word> <number> <number> <word> yesterday and..."
,其中John和G可以是任何东西,只要它们以该顺序出现,并且两个数字之间。
如果您需要在第四个位置专门替换单个大写字母,则可以将\w+
更改为[A-Z]
。
答案 1 :(得分:0)
您可以使用正则表达式模式匹配来告诉Python匹配&#34;&#39; John&#39;,后跟一个空格,后跟一个数字,后跟一个空格,后跟一个数字,然后是大写字母&#34;。
>>> re.sub(r"John\s(\d\s\d\s[A-Z])", r"John \1 and his brother", a)
'I met John 3 2 G and his brother yesterday'
\s
=空格
\d
=数字
[A-Z]
= A和Z之间的大写字母。
围绕\d\s\d\s[A-Z]
的括号告诉Python&#34;捕获&#34;匹配模式的那一部分,允许我们使用\1
在替换字符串中访问它。
答案 2 :(得分:0)
您可以尝试以下使用正向前瞻的正则表达式
>>> import re
>>> str = 'I met John 3 2 G yesterday and..'
>>> m = re.sub(r'(John.*)(?=yesterday)', r'\1and his brother ', str)
>>> m
'I met John 3 2 G and his brother yesterday and..'
<强>解释强>
(John.*)(?=yesterday)
将昨天字符串John(包括John)后面的所有字符与字符串匹配,并将其存储到一个组中。
在替换部分,我们再次通过反向引用调用存储的组。