首页 > 解决方案 > Python正则表达式模式匹配数字和单词问题?

问题描述

我很难创建一个正则表达式模式,也许你可以帮忙。

1.目标是只得到粗体的结果而不是grep xxxx的命令?

var = "grep " +net+ "/mnt/hgfs/IRR/fgen.txt"
f2pat = re.findall(r'^([\d]{1,3})\.(?:[\d]{1,3})\.(?:[\d]{1,3})\.(?:[\d]{1,3})/\d+',fgen)    
print ("FGEN Command: ",f2pat)

FGEN 命令:grep 223.253.0.0/20 /mnt/hgfs/IRR/fgen.txt 223.253.0.0/20

现在我在输出中有两个地址 1 来自命令本身,第二个是结果(粗体),只想匹配结果。

  1. 目标是获取成员一词后的数字:AS xxxxx (BOLD)?/mnt/hgfs/IR/FILE/as4431-customers-sc:members: AS 28723 , AS3212

    fpas = re.findall(r'(^members: AS)(?:\d{1,6})',xxx)

  2. 目标是在工作路线之后获取/匹配IP地址(粗体):?RADB:路线: 1.0.0.0/8

    radbpat = re.findall(r'(?<=RADB:)(\S+ \S+)(?<=route)(\S+ \S+)(?:[\d]{1,3}).(?: [\d]{1,3}).(?:[\d]{1,3}).(?:[\d]{1,3})/\d+',who)

我的正则表达式模式无法正常工作。

谢谢

标签: pythonregexpython-3.xpython-2.7

解决方案


对于第一个,您想要的子网似乎位于字符串的末尾,因此您可以准确捕获:

text = 'grep 223.253.0.0/20 /mnt/hgfs/IRR/fgen.txt 223.253.0.0/20'
result = re.match('^.+\s([\d\.\/]+)$', text).group(1)
# result = '223.253.0.0/20'

对于第二个,看起来你只想捕获 AS xxxxx的第一个实例,所以你可以这样做:

text = '/mnt/hgfs/IR/FILE/as4431-customers-sc:members: AS28723, AS3212'
result = re.match('^.+\b(AS\d+)\b.+$', text).group(1)
# result = 'AS28723'

对于第三个,您可以重用第一个解决方案:

text = 'RADB: route: 1.0.0.0/8'
result = re.match('^.+\s([\d\.\/]+)$', text).group(1)
# result = '1.0.0.0/8'

推荐阅读