regex 拆分保留分隔符的串联函数

mf98qq94  于 2023-01-31  发布在  其他
关注(0)|答案(2)|浏览(129)

我正在尝试拆分包含python函数的字符串,以便结果输出保持单独的函数作为列表元素。
s='hello()there()'应拆分为['hello()', 'there()']
为此,我使用regex lookahead在右括号处拆分,而不是在字符串末尾。
虽然lookahead看起来很有效,但是我不能像很多文章中建议的那样在结果字符串中保留),简单地用regex拆分会丢弃分隔符:

import re
s='hello()there()'
t=re.split("\)(?!$)", s)

这导致:'hello(', 'there()'].

s='hello()there()'
t=re.split("(\))(?!$)", s)

Wrapping the separator as a group导致)被保留为单独的元素:['hello(', ')', 'there()']this approach using the filter() function相同:

s='hello()there()'
u = list(filter(None, re.split("(\))(?!$)", s)))

再次导致括号作为单独的元素:['hello(', ')', 'there()']
如何拆分这样的字符串,使函数在输出中保持完整?

wnavrhmk

wnavrhmk1#

使用**re.findall()**

  1. \w+\(\)匹配一个或多个单词字符,后跟一个左右括号〉该部分匹配hello()there()
t = re.findall(r"\w+\(\)", s)
['hello()', 'there()']

版本:

\w+\(.*?\):匹配一个或多个单词字符,包括下划线后跟左括号和右括号。.*?是非贪婪匹配,表示它将匹配括号中尽可能少的字符。
一个二个一个一个

zbwhf8kr

zbwhf8kr2#

您可以拆分为()的lookbehind和字符串末尾的negative lookahead。

t = re.split(r'(?<=\(\))(?!$)', s)

相关问题