Regex获取字符串python中由管道分隔的第一项和最后一项

2024-10-01 07:45:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下字符串

The|DT|I-MISC Oxford|NNP|I-MISC Companion|NNP|I-MISC to|TO|I-MISC Philosophy|NNP|I-MISC says|VBZ|O ,|,|O "|LQU|O there|EX|O is|VBZ|O no|DT|O single|JJ|O defining|VBG|O position|NN|O that|IN|O all|DT|O anarchists|NNS|O hold|VBP|O ,|,|O and|CC|O those|DT|O considered|VBN|O anarchists|NNS|O at|IN|O best|JJS|O share|NN|O a|DT|O certain|JJ|O family|NN|O resemblance|NN|O .|.|O "|RQU|O In|IN|O the|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。你知道吗

('consequently', 'O'), ('refrain', 'I-ORG'), ('from', 'I-ORG'), ('committing', 'I-ORG'), ('to', 'I-ORG'), ('any', 'O'), ('particular', 'NNP|I-ORG'), ('method', 'O'),

与本节正文相关:

,|,|O whereas|IN|O anarchists|NNS|O must|MD|O always|RB|O have|VB|O anarchy|NN|O as|IN|O their|PRP$|O end|NN|O and|CC|O consequently|RB|O refrain|VB|O from|IN|O committing|VBG|O to|TO|O any|DT|O particular|JJ|O method|NN|O of|IN|O achieving|VBG|O it|PRP|O .|.|O


Tags: andthetoinorgdtnnmisc
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

阅读更多关于

您可以使用^{}拆分字符串:

import re
terms = re.split('[| ]', y)
print zip(terms[::3], terms[2::3])

我喜欢的另一个方法是使用^{}

from operator import itemgetter
filter = itemgetter(0, 2)
print [filter(triplet.split('|')) for triplet in y.split()]

相关问题 更多 >