【问题标题】:Python Regex pattern matching digits and words question?Python Regex 模式匹配数字和单词的问题?
【发布时间】:2019-02-17 02:52:25
【问题描述】:

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

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

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

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

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

    radbpat = re.findall(r'(?

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

谢谢

【问题讨论】:

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


    【解决方案1】:

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

    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'
    

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

    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'
    

    【讨论】:

    • 嗨@MatiasCicero,感谢分享。会研究你的代码。也似乎示例 2 不起作用.. 无法匹配 ASxxxx
    • 试过使用这个,但我看到所有的 AS 都已添加..从成员那里获得第一个 AS 后结束模式: ppat = re.findall("(?
    • @searching1 您需要使用边界匹配,并且您还使用findall,顾名思义,它返回所有匹配。我提供的正则表达式有什么问题?该正则表达式上的每个元素都是有原因的
    • 从你提供的正则表达式模式我有这个回溯 AttributeError: 'str' object has no attribute 'group' ...虽然我尝试使用 re.findall 然后你的模式但没有匹配其输出。谢谢
    • 使用 Findall 如何仅匹配单词 members: 之后的 AS#? @MatiasCicero
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-16
    • 1970-01-01
    • 1970-01-01
    • 2014-01-05
    相关资源
    最近更新 更多