【问题标题】:How to get the substring between two markers in Python multiple times?如何多次获取Python中两个标记之间的子字符串?
【发布时间】:2021-04-21 22:52:44
【问题描述】:
我有以下代码:
s = '''alt="Thunder Force"/>ehkjehkljhiflealt="Godzilla vs. Kong"/>'''
for i in s:
start = s.find('alt="') + len('alt="')
end = s.find('"/>')
substring = s[start:end]
print(substring)
但它只打印了很多次“Thunder Force”。我希望它找到“Thunder Force”和“Godzilla vs. Kong”并分别打印这两个。怎么样?
【问题讨论】:
标签:
python
string
substring
【解决方案1】:
你可以使用正则表达式
import re
s = '''alt="Thunder Force"/>ehkjehkljhiflealt="Godzilla vs. Kong"/>'''
x = re.findall(r'alt="(.*?)"/>', s)
print(x)
输出
['Thunder Force', 'Godzilla vs. Kong']
【解决方案2】:
使用regex 和re.findall()
s = '''alt="Thunder Force"/>ehkjehkljhiflealt="Godzilla vs. Kong"/>'''
print(re.findall(r'(?<=alt\=").*?(?="/>)', s))
#['Thunder Force', 'Godzilla vs. Kong']
【解决方案3】:
这是一个非正则表达式解决方案,看起来更像我认为您通过发布的尝试尝试实现的目标:
start = 0
while True:
start = s.find('alt="', start)
if start == -1:
break
start += len('alt="')
end = s.find('"/>', start)
if end == -1:
break
substring = s[start:end]
start = end
print(substring)
【解决方案4】:
您还可以使用negated character class [^"]+ 匹配除" 之外的任何字符,如果您想匹配至少一个字符,则重复1 次以上。
如果空匹配也可以,可以用*代替+。
import re
s = '''alt="Thunder Force"/>ehkjehkljhiflealt="Godzilla vs. Kong"/>'''
x = re.findall(r'alt="([^"]+)"/>', s)
print(x)
输出
['Thunder Force', 'Godzilla vs. Kong']