Python正则表达式并返回一个数组

时间:2013-08-09 19:27:01

标签: python regex

示例字符串:

ABCDX PPP [ATT:A01AD05 B01AC06 N02BA01] [KP:CCC LLL DDD]

首先检测字符串中ATT然后拆分三个

的正则表达式是什么
ATT:A01AD05 B01AC06 N02BA01 

并返回一个数组/列表。然后还提取ABCDX PPP部分

3 个答案:

答案 0 :(得分:1)

第一部分

import re

myString = 'ABCDX PPP [ATT:A01AD05 B01AC06 N02BA01]'
pattern = r'ATT:.+\]'

match = re.search(pattern, myString)
matchList = str(match.group()).rstrip(']').split(' ')
print(matchList)

对于第二部分,除了要使用的表达式是r'\ w + \ s \ w + \ s ['之外,一切都大致相同,你需要将rstrip更改为rstrip('[')

希望这有帮助

答案 1 :(得分:0)

这是一个解决方案:

import re

sample = 'ABCDX PPP [ATT:A01AD05 B01AC06 N02BA01] [KP:CCC LLL DDD]'
pattern = '''
        ^(\S+\s\S+)\s # Matches "ABCDX PPP"
        \[ATT:        # Matches [ATT:
        (\S+)\s+      # Matches A01AD05
        (\S+)\s+      # Matches B01AC06
        (\S+)\]       # Matches N02BA01
        '''
matched = re.search(pattern, sample, re.VERBOSE)
if matched:
    tokens = matched.groups()
    print tokens

输出:

('ABCDX PPP', 'A01AD05', 'B01AC06', 'N02BA01')

讨论

  • 我利用re模块中的一项功能创建了一个自我文档正则表达式,即re.VERBOSE标志。此标志允许表达式中的任意空格和注释,从而增强可读性。
  • 左右方括号在正则表达式中具有特殊含义,这就是我将其作为\[\]
  • 转义的原因
  • 在代码的最后,tokens包含四个字符串的元组,请参阅输出。

答案 2 :(得分:0)

尝试使用这个吗?

import re

str = 'ABCDX PPP [ATT:A01AD05 B01AC06 N02BA01]'
matched = re.search('([\S\s]+?)\s\[.*?(ATT:\S+)\s*(\S+)\s*(\S+)', str)
if matched:
    tokens = matched.groups()
    print tokens

编辑:根据新约束:

import re

str = 'ABCDX PPP [ATT:A01AD05 B01AC06 N02BA01]'
matched = re.search('([\S\s]+?)\s\[.*?(ATT:[^\]]+)', str)
if matched:
    first = matched.group(1)
    result = matched.group(2).split(' ')
    result[0:0] = [first]
    print result