如何使用正则表达式仅提取输入文本的某些部分?

时间:2016-04-14 09:10:44

标签: python regex

这个问题很简单,但我很遗憾。

输入文字:

  

'/ / 1/2 / CD / IN /所有/ DT US / NNP企业/ NNS的/更少/ RBR是/ VBP   sole / JJ proprietorships / NNS?/。'

代码:

def get_words(pos_sent):
# Your code goes here
    s = ""
    x = re.findall(r"\b(\w*?)/\w*?\b", pos_sent)
    for i in range(0, len(x)):
        s = s + " " + x[i]
    return s

def get_noun_phrase(pos_sent):
    # Penn Tagset
    # Adjetive can be JJ,JJR,JJS
    # Noun can be NN,NNS,NNP,NNPS
    t = get_words(pos_sent)
    regex = r'((\S+\/DT )?(\S+\/JJ )*(\S+\/NN )*(\S+\/NN))'
    return re.findall(regex, t)

第一部分只是删除了部分语音标签,第二部分应该采用它并用它来查找名词短语。

它应该输出:

[’all US businesses’, ’sole proprietorships’]

但它输出一个空列表:

[]

现在,我可以更改它以接受原始标记的句子,然后我得到:

[('all/DT US/NN', 'all/DT ', '', '', 'US/NN'), ('businesses/NN', '', '', '', 'businesses/NN'), ('sole/JJ proprietorships/NN', '', 'sole/JJ ', '', 'proprietorships/NN')]

它确实拥有所有正确的位,但它还有其他一些我不想要的东西。

我仍然是正则表达式的新手,所以我可能会错过一些愚蠢的东西。

1 个答案:

答案 0 :(得分:0)

对于您的第一个功能,请使用以下正则表达式 - from selenium import webdriver import time driver = webdriver.Firefox() driver.get(url) time.sleep(5) htmlSource = driver.page_source - 这样您就可以确保“1/2”保持为\b([0-9A-z\/]*)\/\w*?\b,而不是1/2(同时改进)输出文本的格式化):

1 2