Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x python正则表达式或其他东西_Python 3.x_Regex - Fatal编程技术网

Python 3.x python正则表达式或其他东西

Python 3.x python正则表达式或其他东西,python-3.x,regex,Python 3.x,Regex,我有一个从网络交换机询问接口错误的代码。我得到的输出有时会变化 我从以下格式的开关中获得的输出:(数字不时变化) 因此,我想从我得到的输出中打印只有一行,结尾的数字大于0,就像起始BAG16的行一样 我的代码是这样的: import re kobi = ''' BAGG11 13917779236 10133016 16491979 64 BAGG15 30841323485

我有一个从网络交换机询问接口错误的代码。我得到的输出有时会变化

我从以下格式的开关中获得的输出:(数字不时变化)

因此,我想从我得到的输出中打印只有一行,结尾的数字大于0,就像起始BAG16的行一样

我的代码是这样的:

import re
kobi = '''
BAGG11             13917779236           10133016           16491979          64
BAGG15             30841323485           22747672           19201545           0
BAGG16                  811970                  0             811970           0
'''
err = re.findall (r'[BAGG]',kobi)

print(err)

我认为这可以在没有正则表达式的情况下完成

试试这个:

kobi = '''
BAGG11             13917779236           10133016           16491979          64
BAGG15             30841323485           22747672           19201545           0
BAGG16                  811970                  0             811970           0
'''

lst = kobi.split()
lines = [lst[i:i+5] for i in range(0, len(lst), 5)]

for line in lines:
    if int(line[-1]) > 0:
        print(' '.join(line))
输出:

BAGG11 13917779236 10133016 16491979 64
我对你的意见做了一些假设:

  • 总是五排
  • 最后一行是数值

您可以使用一个模式来匹配开头的BAGG和digits,并匹配结尾以1-9开头的digital

^BAGG\d+[^\S\r\n].*[^\S\r\n][1-9]\d*$

如果有3列,则使用更精确的匹配可以使用量词<代码> { 3 } /代码>以匹配中间的“列”的数目。

^BAGG\d+(?:[^\S\r\n]+\d+){3}[^\S\r\n]+[1-9]\d*$
解释

  • ^
    行的开头
  • BAGG\d+
    匹配BAGG和1+数字
  • (?:
    非捕获组
    • [^\S\r\n]+\d+
      匹配1+个空格字符,不带换行符,后跟1+个数字
  • ){3}
    关闭非捕获组并重复3次
  • [^\S\r\n]+
    匹配1+不带换行符的空白字符
  • [1-9]\d*
    匹配数字1-9,后跟可选数字
  • $
    行尾
|

比如说

import re

kobi = '''
BAGG11             13917779236           10133016           16491979          64
BAGG15             30841323485           22747672           19201545           0
BAGG16                  811970                  0             811970           0
'''
err = re.findall (r'^BAGG\d+(?:[^\S\r\n]+\d+){3}[^\S\r\n]+[1-9]\d*$', kobi, re.MULTILINE)

print(err)
输出

['BAGG11             13917779236           10133016           16491979          64']

我在JavaScript上测试了这个模式:
/BAGG.+(?:\s+(?:0*[1-9]\d*\d*\.0*[1-9]\d*)$/mg
。Patern find行以BAGG开头,以大于0的数字结尾。