1

我正在编写我的第一个 Python 重新代码,我对正则表达式有一些疑问。我有一个变量,其中包含

a = "'PoE Port Info','1      up     medium    Auto Class         Searching             0       0.0         0           0.0','10     up     low       User defined 4(W) Searching             -       0.0         0           0.0'"

我需要提取:

'1      up     medium    Auto Class         Searching             0       0.0         0           0.0'

并将字符串转换为删除所有空格的字符串列表

['1','up','medium','Auto Class','Searching','0','0.0','0','0.0']

相似地

'10     up     low       User defined 4(W) Searching             -       0.0         0           0.0'

删除空格并转换为列表

['10','up','low','User defined,'4(W)','Searching','-','0.0','0','0.0']

该字符串中的所有其他剩余数据不应匹配。

我的代码:

a = "'PoE Port Info','1      up     medium    Auto Class         Searching             0       0.0         0           0.0','10     up     low       User defined 4(W) Searching             -       0.0         0           0.0'"
b= []
#split string with ,
a = a.split(",")
print(a)
for item in a:
    c = re.findall(r"[0-9]+[\s+[a-z]+]*[0-9]+",item, re.I)
    if c:
        #Replace whitespace character to spaces
        temp = re.sub(r'[\s]+',' ', c[0])
        #print(temp)
        b.append(temp.split(" "))
print(b)

此代码正在运行,但我在正则表达式中遇到问题。我当前的输出:

[['1', 'up', 'medium', 'Auto', 'Class', 'Searching', '0'], ['10', 'up', 'low', 'User', 'defined', '4']]

有的请帮帮我。

怎么写RE?

4

2 回答 2

1

我建议您使用像regex 101这样的在线正则表达式编辑器并在那里测试您的测试字符串 - 在那里创建有效语法要容易得多,并且在匹配信息窗口中您还可以看到哪个组是什么。

我可能会尝试创建一组 x 组(一个用于您需要的每个值)。之后无需拆分等操作。

于 2020-04-15T08:30:17.703 回答
1

如果您知道不需要检查嵌套/转义的单引号,您可以简单地使用一个正则表达式提取所有字段,该正则表达式将一次性捕获所有字段。问题在于可能包含任何(数量)字符的第四个字段,因此您需要拼出其他字段的模式。

这是一个示例正则表达式:

import re
a = "'PoE Port Info','1      up     medium    Auto Class         Searching             0       0.0         0           0.0','10     up     low       User defined 4(W) Searching             -       0.0         0           0.0'"
res = re.findall(r"(?!^)'(\d+)\s+(\w+)\s+(\w+)\s+([^']*?)\s+(\S+)\s+(\S+)\s+([\d.]+)\s+(\d+)\s+([\d.]+)'", a)
print(res)
# => [
#       ('1', 'up', 'medium', 'Auto Class', 'Searching', '0', '0.0', '0', '0.0'), 
#       ('10', 'up', 'low', 'User defined 4(W)', 'Searching', '-', '0.0', '0', '0.0')
#    ]

请参阅正则表达式演示Python 演示

细节

  • (?!^)'- a'不在字符串的开头
  • (\d+)- 第一组:一位或多位数字
  • \s+- 1+ 空格
  • (\w+)\s+- 第 2 组:一个或多个单词字符,然后是 1+ 个空格
  • (\w+)\s+- 第 3 组:一个或多个单词字符,然后是 1+ 个空格
  • ([^']*?)\s+- 第 4 组:除'尽可能少的字符外,任何 0 个或多个字符,然后是 1+ 个空格
  • (\S+)\s+- 第 5 组:任何 1+ 个非空格,然后是 1+ 个空格
  • (\S+)\s+- 第 6 组:任何 1+ 个非空格,然后是 1+ 个空格
  • ([\d.]+)\s+- 第 7 组:任何 1+ 个数字/点,然后是 1+ 个空格
  • (\d+)\s+ - 第 8 组:任何 1+ 个数字,然后是 1+ 个空格
  • ([\d.]+)- 第 9 组:任何 1+ 数字/点
  • '- 一个'字符。
于 2020-04-15T11:30:49.827 回答