在python中搜索字符串

时间:2014-06-24 17:00:25

标签: python search

我如何在文本中搜索字符串并在其后面添加另一个字符串,如下所示:

我想在文本中搜索“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)

3 个答案:

答案 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)后面的所有字符与字符串匹配,并将其存储到一个组中。

  • 在替换部分,我们再次通过反向引用调用存储的组。