使用正则表达式,在字符后获取字符串,特殊情况

时间:2018-10-28 22:35:58

标签: python regex string

我正在使用带正则表达式的python来读取文件并获取字符(/)后的字符串列表。

例如:

text = "Youngblood /Pop Midnight/R&B Thunder/Rock"
re.findall(r'/([^\s]+)', text)

会返回

['Pop', 'R&B', 'Rock']

现在,假设在特殊情况下,子字符串中有两个字符'/',

abc\/def/this

abc\/def\/ghi/this

正则表达式将无法正常工作(如我所愿),并返回'def / this'或'def / ghi / this'。

正确的输出是“ this”。如何修复正则表达式以使其与特殊情况配合使用?

3 个答案:

答案 0 :(得分:3)

2

返回

re.findall(r'/([^\s/]+(?!\S))', text)

您需要先行,因为您想在比赛后检查角色。您不能使用['Pop', 'R&B', 'Rock', 'ghj'] (将与空格匹配),因为这样会跳过最后一项。构造(?=\s)表示 not not 一个空格,该空格既与空格匹配,也与字符串结尾。

答案 1 :(得分:1)

如果字符串之间始终有空格,即使没有正则表达式也可以做到。

size

输出:

text = "Youngblood/Pop Midnight/R&B Thunder/Rock abc/def/ghj"
output = []

for item in text.split(" "):
    output.append(item.split("/")[-1])

答案 2 :(得分:0)

如果您不愿意使用 all regex来完成确切的目的,则可以将已经拥有的内容与该列表理解功能相结合:

targets = [e.split('/')[-1] for e in re.findall('/([^\s]+)', text)]