【问题标题】:find string of arbitrary length before a known string在已知字符串之前找到任意长度的字符串
【发布时间】:2013-06-16 05:19:53
【问题描述】:

只要说我有一个字符串,例如:

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/”之前的每个单词。这意味着我的输出是

讲座,联合国教科文组织,房子

我试过了:

print re.findall(r'/NNP/',string) 然后向后工作,但我不能随意。单词前面总是有一个空格,这可能会有所帮助。

编辑:删除列表中的错误。

【问题讨论】:

  • Paris 是您答案的一部分,它不是在 /NNP/ 之前,而是在 /NNP- 之前?

标签: python string parsing


【解决方案1】:

试试这个:

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']

【讨论】:

  • +1 和我写的差不多,但最好使用\S 而不是[^\s]
  • 谢谢。但对于另一个领域,我得到: [u'Erwin', u'Schr\xf6dinger', u'Bose\u2013Einstein', u'Quantizing', u'Erwin', u'Schr\xf6dinger', u'Schr\xf6dinger' , u'Einstein', u'Einstein'] 以及当我对它执行 str() 时:对于 listout 中的项目:打印 str(item)。 UnicodeEncodeError:'ascii' 编解码器无法在位置 7 编码字符 u'\u2013':序数不在范围内(128)。我知道这是一个很长的破折号,但是有没有办法让它出现在终端中?
  • @Griff 这应该是一个不同的问题,但这里是:):print str(item.encode('utf-8'))
  • 先生,我给你小费!谢谢。
【解决方案2】:

前瞻。

>>> 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']

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-09
    • 2021-12-21
    • 2012-02-27
    • 2014-05-22
    相关资源
    最近更新 更多