我有以下字符串
The | DT | I-MISC Oxford | NNP | I-MISC Companion | NNP | I-MISC to | TO | I-MISC理念| NNP | I-MISC说| VBZ | O,|,| O“| LQU | O那里| EX | O是| VBZ | O no | DT | O单| JJ | O定义| VBG | O位置| NN | O那个| IN | O all | DT | O无政府主义者| NNS | O hold | VBP | O,|,| O和| CC | O那些| DT | O考虑| VBN | O无政府主义者| NNS | O at | IN | O最佳| JJS | O股| NN | O a | DT | O确定| JJ | O族| NN | O相似性| NN | O。|。| O“| RQU | O. 在| IN | O | DT | O
我想得到每个三联的第一个和最后一个项目。所以对于| DT | I-MISC,我想要(The,I-MISC)。 这是我的实施,我想知道是否有更好更稳定的东西。
#STRAT 2: get first and third. this seems more stable
pat = r'((?<= ).+?(?=\|))'
nerpat = r'(?<=[A-Z]\|).+?(?= )'
print zip(re.findall(pat, y), re.findall(nerpat, y))
我的模式中的错误包括:下面的NNP | I-ORG。
('因此','O'),('克制','I-ORG'),('从','I-ORG'),('提交','I-ORG'),( 'to','I-ORG'),('any','O'),('特别','NNP | I-ORG'),('方法','O'),
与此部分文字相关:
,|,| O而| IN | O无政府主义者| NNS | O必须| MD | O总是| RB | O有| VB | O无政府状态| NN | O as | IN | O他们的| PRP $ | O end | | NN | O和| CC | O因此| RB | O refrain | VB | O from | IN | O commit | VBG | O to | TO | O any | DT | O特殊| JJ | O方法| NN | O的| IN | O达成| VBG | O it | PRP | O。|。| O
答案 0 :(得分:2)
获取匹配的组表单索引1和2以获取每个三元组的第一个和最后一个项目
([^|]+)\|[^|]+\|([^|]+)
First item-----^^^^^^ ^ ^ ^^^^^-----------Last item
First Pipe_____| |_______Second pipe
这里是online demo
注意:添加\s
以匹配任何空格字符[\r\n\t\f ]
,如以下评论中所示。
示例代码:
import re
p = re.compile(ur'([^|]+)\|[^|]+\|([^|]+)')
test_str = u"..."
re.findall(p, test_str)
模式说明:
( group and capture to \1:
[^|]+ any character except: '|' (1 or more times)
) end of \1
\| '|'
[^|]+ any character except: '|' (1 or more times)
\| '|'
( group and capture to \2:
[^|]+ any character except: '|' (1 or more times)
) end of \2
了解更多关于
的信息答案 1 :(得分:1)
您可以使用re.split
分割字符串:
import re
terms = re.split('[| ]', y)
print zip(terms[::3], terms[2::3])
我喜欢的另一个是使用operator.itemgetter
:
from operator import itemgetter
filter = itemgetter(0, 2)
print [filter(triplet.split('|')) for triplet in y.split()]