Python Regex模式匹配数字和单词的问题吗?

时间:2019-02-17 02:52:26

标签: python regex python-3.x python-2.7

我很难创建正则表达式模式,也许您可​​以帮忙。

1。目标是仅获取以粗体显示的结果,而不是带有grep x.x.x.x的命令?

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是命令本身的第二个地址,第二个是result(粗体),只想匹配结果。

  1. 目标是获取单词成员后的数字:AS xxxxx (粗体)? / 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 +',谁)

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

谢谢

1 个答案:

答案 0 :(得分:0)

对于第一个,看来您想要的子网位于字符串的末尾,因此您可以准确地捕获到该子网:

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'