Python正则表达式生成单词,直到找到字符或特殊单词为止

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

几个小时以来我一直在努力解决这个问题,只是因为某种原因,我似乎无法在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 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)