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 位数字的模式。
比如有一个字符串或者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 位数字的模式。