正则表达式按最后一次出现的模式拆分字符串

时间:2017-03-11 10:15:39

标签: python regex

我正在使用正则表达式将字符串<book name> by <author name>拆分为书籍和作者姓名。

re.split(r'\bby\b', text, 0, re.I)

但是当书名包含“by”(例如Death by Blackhole by Tyson =&gt; ['Death', 'by Black...']

时出现问题

如何按最后一次搜索模式拆分字符串?

我有预感 - / + ve look-ahead / behind在这里很有用,但目前正在试图构建正确的语法。

4 个答案:

答案 0 :(得分:3)

您可以在findall之前使用.*贪婪by

re.findall(r'(.*)\s+by\s+(.*)', text, re.I)

repl.it

上查看

答案 1 :(得分:3)

您可以从拆分中重建:

parts = re.split(r'\bby\b', text, 0, re.I)
book, author = 'by'.join(parts[:-1]), parts[-1]

或者完全匹配:

match = re.match(r'(.*)\bby\b(.*)', text, re.I)

答案 2 :(得分:2)

您可以使用此单一正则表达式:

re.search('((.*( by )?.*) by (.*))',text).group(2,4)

enter image description here

答案 3 :(得分:1)

你可以试试这个,它会匹配最后一个,在你的例子上测试

by(?!.*by.*)