贪心正则表达式和非贪心正则表达式的使用问题

2024-09-28 21:23:35 发布

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

我不明白我做错了什么。我只需要提取路由器的名称和端口号。 路由器名称是“C1900_ROUTER1_SR7”,端口是“4/1/4”,它可以存在“B:C1900_ROUTER1_SR7……”而不是“A:C1900_ROUTER1_SR7……”

string = "A:C1900_ROUTER1_SR7# 

A:C1900_ROUTER1_SR7# echo "<team:script>"

<team:script>

A:C1900_ROUTER1_SR7# /environment no more 

A:C1900_ROUTER1_SR7# 

A:C1900_ROUTER1_SR7# show port 4/1/4 

"

regex_S2 = '(A|B):(?P<routername>.*?)#\s*show port\s*(?P<port>.*?)\s*\n'

match_L0_iter = re.findall(regex_S2, string, flags=re.DOTALL)

routername捕获的组结果="C1900_ROUTER1_SR7# A:C1900_ROUTER1_SR7# echo "<pnm:script>" <pnm:script> A:C1900_ROUTER1_SR7# /environment no more A:C1900_ROUTER1_SR7# A:C1900_ROUTER1_SR7"


Tags: noecho名称stringenvironmentportmoreshow
1条回答
网友
1楼 · 发布于 2024-09-28 21:23:35

您可以更新模式以匹配结尾处的非空白字符,而不是非贪婪的.*?要匹配路由器名称,还可以使用negated character class[^#]+匹配除#之外的任何字符

要匹配A或B,可以使用字符类。你知道吗

[AB]:(?P<routername>[^#]+)#\s*show port\s*(?P<port>\S+)

Regex demo

如果必须匹配行的其余部分(包括换行符),则可以在模式中附加\s*\n。你知道吗

相关问题 更多 >