如何在所有正则表达式匹配之前/之后获取字符串的不匹配头/尾

2024-10-01 00:27:35 发布

您现在位置:Python中文网/ 问答频道 /正文

如果我的绳子

firsthead -var1 val1 -var2 val2 -varN valN thensometail

以及

我用来捕获重复的-<varname> <varval>模式的RegEx模式是

-([^\s]+)?\s([^\s]+)?\s

(必须使用[^\s]而不是{},因为后者排除了可以是var/val的一部分,基本上除了空白之外的任何内容都可以是var名称和值的一部分)

以及

我使用re.findall查找上述模式的所有重复匹配项

如何分别在捕获的匹配之前和之后提取字符串的头(firsthead)和尾部(thensometail)?在


Tags: var模式valregex绳子val1varnamevar1
2条回答

假设原始字符串存储在stringyThingy中,re.findall的(非空)结果在allFound中:

firsthead = stringyThingy[:allFound[0].start()]
thensometail = stringyThingy[allFound[-1].end():]

我不知道字符串的所有格式,因此以下语句只适合您提到的字符串:

>>> test = 'firsthead -var1 val1 -var2 val2 -varN valN thensometail'
>>> exp = r"([^\s])+\s(-\S+\s\S+\s)+([^\s])+"
>>> re_exp = re.compile(exp)
>>> res = re_exp.search(test).group().split()
>>> head = res[0]
>>> tail = res[-1]

相关问题 更多 >