Python 如何计算“的数量”;";单独而不是n的话?

Python 如何计算“的数量”;";单独而不是n的话?,python,Python,我有一份清单: ‘mor:co |记住pro |你数过去’、‘mor:det:num |一个det:num |二个| 数据:num |三个数据:num |四个数据:num |五','mor:pro:wh | what mod | do&pass 赞成者|你|带来n:prop | Ursula | | | mor:pro:sub | I v |带来并通过qn |一些 n | puppet PL | | mor:pro | you v | want inf | to v | look adv | |

我有一份清单:

‘mor:co |记住pro |你数过去’、‘mor:det:num |一个det:num |二个| 数据:num |三个数据:num |四个数据:num |五','mor:pro:wh | what mod | do&pass 赞成者|你|带来n:prop | Ursula | | | mor:pro:sub | I v |带来并通过qn |一些 n | puppet PL | | mor:pro | you v | want inf | to v | look adv | | in coord | and | v |见'

我如何计算独立的
n
的数量,忽略单词中出现的内容


(符号
n
代表名词,因此我想计算它们,但忽略它在单词中出现的位置-例如
计数过去的时间
det:num

您可以使用“向前看”和“向后看”:

lines="""'mor:co|remember pro|you v|count-PAST', 'mor:det:num|one det:num|two det:num|three det:num|four det:num|five', 'mor:pro:wh|what mod|do&PAST pro|you v|bring n:prop|Ursula', 'mor:pro:sub|I v|bring&PAST qn|some n|puppet-PL', 'mor:pro|you v|want inf|to v|look adv|in coord|and v|see'"""


import re
print(re.findall("(?<=\s)n(?=[\|:])",lines))
['n', 'n']
对于python2:

from string import maketrans
tbl = maketrans(":|","  ")
lines.translate(tbl).split().count("n")
翻译效率更高:

In [8]: tbl = maketrans(":|","  ")

In [9]: timeit lines.translate(tbl).split().count("n")
100000 loops, best of 3: 4.07 µs per loop

In [10]: r = re.compile("(?<=[\s])n(?=[\|:])")

In [11]: timeit len(r.findall(lines))
100000 loops, best of 3: 9.27 µs per loop
[8]中的
:tbl=maketrans(“:|“,”)
[9]中:timeit lines.translate(tbl.split().count(“n”)
100000个回路,最佳3个:每个回路4.07µs

在[10]:r=re.compile(“(?您需要一个语法来描述这个字符串,并且需要lexer/parser来适当地将它分开。扫描或正则表达式不行。您是否只想
r'\bn\b'
(请参见)?那么什么是单独考虑的n
n:prop
n | puppet PL
?您可以
s.count('n:'))
对于列表中的每个字符串,但这看起来确实像是您应该适当使用库的输出。是的。我只想要r'\bn\b。非常感谢。顺便问一下,我如何计算n的数量?len将是计数
In [8]: tbl = maketrans(":|","  ")

In [9]: timeit lines.translate(tbl).split().count("n")
100000 loops, best of 3: 4.07 µs per loop

In [10]: r = re.compile("(?<=[\s])n(?=[\|:])")

In [11]: timeit len(r.findall(lines))
100000 loops, best of 3: 9.27 µs per loop