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

Python: How can I find text between certain words in a string?

比如有一个字符串或者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)

如何改进我的代码?

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

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

输出 :

['@111', '@222']

您可以使用 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

如果您总是在 @ 后跟 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'(@\d{3})', text)

print(results)

所以() 意味着保留@后跟仅3 位数字的模式。