Python 在已知字符串之前查找任意长度的字符串
只要说我有一个字符串,比如:Python 在已知字符串之前查找任意长度的字符串,python,string,parsing,Python,String,Parsing,只要说我有一个字符串,比如: Lecture/NNP/B-NP/O delivered/VBD/B-VP/O at/IN/B-PP/B-PNP the/DT/B-NP/I-PNP UNESCO/NNP/I-NP/I-PNP House/NNP/I-NP/I-PNP in/IN/B-PP/B-PNP Paris/NNP-LOC/B-NP/I-PNP 我想把出现在“/NNP/”之前的每个单词都抽出来。这意味着我的输出是 演讲,教科文组织,众议院 我试过: 打印re.findall(r'/NNP/'
Lecture/NNP/B-NP/O delivered/VBD/B-VP/O at/IN/B-PP/B-PNP the/DT/B-NP/I-PNP UNESCO/NNP/I-NP/I-PNP House/NNP/I-NP/I-PNP in/IN/B-PP/B-PNP Paris/NNP-LOC/B-NP/I-PNP
我想把出现在“/NNP/”之前的每个单词都抽出来。这意味着我的输出是
演讲,教科文组织,众议院
我试过:
打印re.findall(r'/NNP/',string),然后反向工作,但我不能任意设置。单词前面总是有一个空格,这可能会有所帮助
编辑:删除列表中的错误。尝试以下操作:
s = 'Lecture/NNP/B-NP/O delivered/VBD/B-VP/O at/IN/B-PP/B-PNP the/DT/B-NP/I-PNP UNESCO/NNP/I-NP/I-PNP House/NNP/I-NP/I-PNP in/IN/B-PP/B-PNP Paris/NNP-LOC/B-NP/I-PNP'
re.findall(r'(\S+)/NNP/', s)
=> ['Lecture', 'UNESCO', 'House']
试试这个:
s = 'Lecture/NNP/B-NP/O delivered/VBD/B-VP/O at/IN/B-PP/B-PNP the/DT/B-NP/I-PNP UNESCO/NNP/I-NP/I-PNP House/NNP/I-NP/I-PNP in/IN/B-PP/B-PNP Paris/NNP-LOC/B-NP/I-PNP'
re.findall(r'(\S+)/NNP/', s)
=> ['Lecture', 'UNESCO', 'House']
向前看
>>> re.findall('(?:\s|^)[^/]+(?=/NNP/)', 'Lecture/NNP/B-NP/O delivered/VBD/B-VP/O at/IN/B-PP/B-PNP the/DT/B-NP/I-PNP UNESCO/NNP/I-NP/I-PNP House/NNP/I-NP/I-PNP in/IN/B-PP/B-PNP Paris/NNP-LOC/B-NP/I-PNP')
['Lecture', 'UNESCO', 'House']
向前看
>>> re.findall('(?:\s|^)[^/]+(?=/NNP/)', 'Lecture/NNP/B-NP/O delivered/VBD/B-VP/O at/IN/B-PP/B-PNP the/DT/B-NP/I-PNP UNESCO/NNP/I-NP/I-PNP House/NNP/I-NP/I-PNP in/IN/B-PP/B-PNP Paris/NNP-LOC/B-NP/I-PNP')
['Lecture', 'UNESCO', 'House']
巴黎是如何成为你答案的一部分的,它不是在前面,而是在前面。巴黎是如何成为你答案的一部分的,它不是在前面,而是在前面。它几乎和我写的一模一样,但最好是在前面使用
\s
。谢谢。但对于另一个领域,我得到了:[u'Erwin',u'Schr\xf6dinger',u'Bose\u2013Einstein',u'Quantizing',u'Erwin',u'Schr\xf6dinger',u'Einstein',u'Einstein',u'Schr\xf6dinger',u'Einstein',u'Einstein'],当我在上面做str时:对于列表中的项目:打印str(项目)。UnicodeEncodeError:“ascii”编解码器无法对位置7中的字符u'\u2013'进行编码:序号不在范围(128)内。我知道这是一个很长的破折号,但有没有办法让它出现在终端上?@Griff这应该是一个不同的问题,但这里是:):print str(item.encode('utf-8'))
我向你致敬,先生!谢谢。+1几乎和我写的一模一样,但是最好使用\s
而不是[^\s]
。谢谢。但对于另一个领域,我得到了:[u'Erwin',u'Schr\xf6dinger',u'Bose\u2013Einstein',u'Quantizing',u'Erwin',u'Schr\xf6dinger',u'Einstein',u'Einstein',u'Schr\xf6dinger',u'Einstein',u'Einstein'],当我在上面做str时:对于列表中的项目:打印str(项目)。UnicodeEncodeError:“ascii”编解码器无法对位置7中的字符u'\u2013'进行编码:序号不在范围(128)内。我知道这是一个很长的破折号,但有没有办法让它出现在终端上?@Griff这应该是一个不同的问题,但这里是:):print str(item.encode('utf-8'))
我向你致敬,先生!多谢各位。