gpt4 book ai didi

python - 正则表达式单行仅匹配特定单词后的内容?

转载 作者:行者123 更新时间:2023-11-28 16:29:43 25 4
gpt4 key购买 nike

我想从这样的列表中提取歌曲名称:'some text here, songs: song1, song2, song3, fro: othenkl' 并获取 ['song1', '歌曲 2','歌曲 3']。所以我尝试在一个正则表达式中做到这一点:

result =  re.findall('[Ss]ongs?:?.*', 'songs: songname1, songname2,')
print re.findall('(?:(\w+),)*', result[0])

完美匹配:['', '', '', '', '', '', '', 'songname1', '', 'songname2', ''] (空字符串除外,但 nbd。

但我想在一行中完成,所以我执行以下操作:

print re.findall('[Ss]ongs?:?(?:(\w+),)*','songs: songname1, songname2,')

但我不明白为什么这无法捕获与上面两个正则表达式相同的内容:

['', 'name1', 'name2']

有没有办法在一行中完成这个?在这里简明扼要会很有用。谢谢。

最佳答案

您不需要使用 re.findall在这种情况下,您最好使用 re.search找到歌曲的顺序然后用逗号分隔结果 , .您也不需要使用字符类 [Ss]要匹配大写字母,您可以使用忽略大小写标志(re.I):

>>> s ='some text here, songs: song1, song2, song3, fro: othenkl'
>>> re.search(r'(?<=songs:)(.+),', s,flags=re.I).group(1).split(',')
[' song1', ' song2', ' song3']

(?<=songs:)是正面的外观,这将使您的正则表达式引擎与 songs: 之前的字符串匹配和 (.+),将匹配 songs: 之后最大的字符串逗号后面是歌曲的顺序。

还有一种更通用的方式,而不是在正则表达式末尾指定逗号,您可以根据歌曲名称后跟此模式来捕获歌曲名称 \s\w+: .

>>> re.search(r'(?<=songs:)(.+)(?=\s\w+:)', s).group(1).split(',')
[' song1', ' song2', ' song3', '']

关于python - 正则表达式单行仅匹配特定单词后的内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33190096/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com