示例字符串:
ABCDX PPP [ATT:A01AD05 B01AC06 N02BA01] [KP:CCC LLL DDD]
首先检测字符串中ATT
然后拆分三个
ATT:A01AD05 B01AC06 N02BA01
并返回一个数组/列表。然后还提取ABCDX PPP
部分
答案 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