Python:如何在字符串中的某些单词之间找到文本?

Posted

技术标签:

【中文标题】Python:如何在字符串中的某些单词之间找到文本?【英文标题】:Python: How can I find text between certain words in a string? 【发布时间】:2019-12-04 18:08:47 【问题描述】:

比如有一个字符串或者txt

"""
asfas @111 dfsfds @222 dsfsdfsfsd dsfds
dsfsdfs sdfsdgsd @333 dsfsdfs dfsfsdf @444 dfsfsd
dsfssgs sdsdg @555 fsfh
"""

想要的结果:

"""
@111
@222
@333
@444
@555
"""

使用下面的代码,我只能看到第一个结果。

import re
html="asfas @111 dfsfds @222 dsfsdfsfsd dsfds"
result = re.search('@"(.+?) ', html)
x = (result.group(0))
print(x)

如何改进我的代码?

【问题讨论】:

re.findall 或 re.finditer 怎么样? 【参考方案1】:

您可以使用re.findall 方法代替re.search(re.search 仅搜索正则表达式模式产生匹配的第一个位置):

import re

txt = '''asfas @111 dfsfds @222 dsfsdfsfsd dsfds
dsfsdfs sdfsdgsd @333 dsfsdfs dfsfsdf @444 dfsfsd
dsfssgs sdsdg @555 fsfh'''

print(*re.findall(r'@\d+', txt), sep='\n')

打印:

@111
@222
@333
@444
@555

【讨论】:

【参考方案2】:

如果你总是有 @ 后跟 3 位数字,那么:

import re

text = '''asfas @111 dfsfds @222 dsfsdfsfsd dsfds
dsfsdfs sdfsdgsd @333 dsfsdfs dfsfsdf @444 dfsfsd
dsfssgs sdsdg @555 fsfh
'''

results = re.findall(r'(@\d3)', text)

print(results)

所以() 表示保留@ 后跟仅3 位数字的模式。

【讨论】:

【参考方案3】:

即使不使用正则表达式也可以做到这一点:

html="asfas @111 dfsfds @222 dsfsdfsfsd dsfds"
x = [i for i in html.split() if i.startswith('@')]

输出

['@111', '@222']

【讨论】:

以上是关于Python:如何在字符串中的某些单词之间找到文本?的主要内容,如果未能解决你的问题,请参考以下文章

python如何查找两个文本文件之间的所有单词匹配

Python:读取文件时如何忽略两个特定单词之间的文本?

在 Python 中的字符串中的特定单词之间插入逗号

如何匹配类似于mysql中的python字符串

如何在传入的文本中突出显示某些单词?

如何从python中的图像中删除某些文本?