如果我有这个数据
NIST SP 800-53 :: CM-7
NIST SP 800-53A :: CM-7.1 (iii)
NIST SP 800-53 Revision 4 :: CM-7 b
NIST SP 800-53 :: IA-5 (1) (c)
NIST SP 800-53A :: IA-5 (1).1 (v)
NIST SP 800-53 Revision 4 :: IA-5 (1) (c)
NIST SP 800-53 :: IA-7
NIST SP 800-53A :: IA-7.1
NIST SP 800-53 Revision 4 :: IA-7
NIST SP 800-53 :: IA-7
NIST SP 800-53A :: IA-7.1
NIST SP 800-53 Revision 4 :: IA-7
NIST SP 800-53 :: SC-28
NIST SP 800-53A :: SC-28.1
NIST SP 800-53 Revision 4 :: SC-28
NIST SP 800-53 :: SC-23 (3)
NIST SP 800-53A :: SC-23 (3).1 (ii)
NIST SP 800-53 Revision 4 :: SC-23 (3)
NIST SP 800-53 :: SC-3
NIST SP 800-53A :: SC-3.1 (ii)我只想检索"::“之后的值,不想做其他的事情,使用条带删除空格,如何使用re.sub将空格放入变量中,并在其中打印。
对于像这样的行
NIST SP 800-53 Revision 4 :: IA-5 (1) (c)我所要做的就是字符串"IA-5“-去掉字符串的第一部分,然后从第一个开括号或空格开始?我必须说明没有括号的行,就像下面这行:
NIST SP 800-53 Revision 4 :: CM-7 b我只需要子字符串"CM-7“,不需要其他内容。
发布于 2018-04-12 10:17:15
使用re.findall而不是re.sub
import re
data = list(filter(None, input.split('\n')))
last_data = [re.findall('(?<=::\s)[a-zA-Z]+\-[\d\.]+', i)[0] for i in data]输出:
['CM-7', 'CM-7.1', 'CM-7', 'IA-5', 'IA-5', 'IA-5', 'IA-7', 'IA-7.1', 'IA-7', 'IA-7', 'IA-7.1', 'IA-7', 'SC-28', 'SC-28.1', 'SC-28', 'SC-23', 'SC-23', 'SC-23', 'SC-3', 'SC-3.1']发布于 2018-04-12 10:19:48
[re.sub('.*?::\s*(\S*)\s.*', '\g<1>', line, flags=re.DOTALL) for line in data]将工作得很好:)
我是捕获组子集的铁杆粉丝。
( re.DOTALL将处理行尾的繁琐空格)
https://stackoverflow.com/questions/49786931
复制相似问题