Python正则表达式生成单词,直到找到字符或特殊单词为止
几个小时以来我一直在努力解决这个问题,只是因为某种原因,我似乎无法在regex上动脑 我正在使用此模式逐行查看下面的字符串:Python正则表达式生成单词,直到找到字符或特殊单词为止,python,regex,python-3.x,Python,Regex,Python 3.x,几个小时以来我一直在努力解决这个问题,只是因为某种原因,我似乎无法在regex上动脑 我正在使用此模式逐行查看下面的字符串: pattern = re.compile(r"^[^&,]*") 字符串保存在字典中,因此在其上循环如下: for dct in lst: print(re.search(pattern, dct['artist']).group(0)) """ Drake Post Malone Featuring Ty Dolla $ign BlocBoy JB
pattern = re.compile(r"^[^&,]*")
字符串保存在字典中,因此在其上循环如下:
for dct in lst:
print(re.search(pattern, dct['artist']).group(0))
"""
Drake
Post Malone Featuring Ty Dolla $ign
BlocBoy JB Featuring Drake
Offset & Metro Boomin
Jay Rock, Kendrick Lamar, Future & James Blake
"""
如上所述,我得到了预期的结果:
"""
Drake
Post Malone Featuring Ty Dolla $ign
BlockBoy JB Featuring Drake
Offset
Jay Rock
"""
但我不知道如何获得add,它也应该停在字符串“feature”上,我已经尝试了100种不同的\bFeatureing\b变体,大写字母b
,前面、后面的不同标记,以及正则表达式中的位置
这是我得到的最接近的,但它只匹配具有“特色”的行:
这给了我这个输出:
None
<_sre.SRE_Match object; span=(0, 12), match='Post Malone '>
<_sre.SRE_Match object; span=(0, 11), match='BlocBoy JB '>
None
<_sre.SRE_Match object; span=(0, 12), match='Post Malone '>
None
您可以使用re.sub
:
str = re.sub(r'\s*(?:[&,]|Featuring).*', '', str)
\s*(?:[&,]|特色)。*
将匹配任何行中以&
或,
或开头的文本,直到行尾,我们将其替换为空字符串。您可以使用
re.findall(r'^(?:(?!\bFeaturing\b)[^&,\n])*\b', s, re.M)
或
看到或看到。就结果而言,regexp是等效的
详细信息
^
-行的开头
(?:(?!\bFeature\b)[^&,\n])*
-(请参阅)除&
、、
和换行符以外的任何字符,尽可能多的字符和换行符,它们不会启动整个单词
\b
-单词边界
*?(?=\s*(?:\bFeatureing\b |[&,]|$)
-匹配除换行符以外的任何0+字符,尽可能少(*?
)直到最左边出现的0+空格,后跟
\b特色化\b
-全词特色化
[&,]
-a&
或,
字符
$
-行末
您需要这些项目的列表还是需要删除不匹配的部分行?试试看,你成功了!如果你发布一个答案,我会接受的,非常感谢!从演示中看起来应该可以做到这一点,但出于某种原因,我没有将其融入到我的模型中。Wiktor的模式与复制粘贴一起工作。不过非常感谢你的努力!如果要使用re.search
,请使用:as regex
str = re.sub(r'\s*(?:[&,]|Featuring).*', '', str)
re.findall(r'^(?:(?!\bFeaturing\b)[^&,\n])*\b', s, re.M)
re.findall(r'^.*?(?=\s*(?:\bFeaturing\b|[&,]|$))', s, re.M)