Regexp:一些问题

时间:2016-09-15 13:41:43

标签: python regex python-3.x

Python 3

text = "(CNN)Meaalofa Te'o -- Buemi. Canberra,"

def discard_punctuation(text):
    regex = '\W*^\s^\d*-'
    return re.sub(regex, "", text)

def handle_text(text):
    text_without_punctuation = discard_punctuation(text)
    words_array = text_without_punctuation.split()
    pass // Breakpoint

handle_text(text)

从任意文本我只想选择单词。调查问题,我发现有时连字符在单词内。或者一个数字也可以(9岁,像峡谷一样)。

我的正则表达式是regex ='\ W * ^ \ s ^ \ d * - '。

取所有非字母数字字符;排除所有空格特征,这是分裂方法所必需的;排除所有未跟随连字符的数字。

我还应该排除不是单词的连字符。

结果是: :['(CNN)Meaalofa',“Te'o”,' - ','Buemi。','堪培拉',]

文档:https://docs.python.org/3/howto/regex.html

\W
Matches any non-alphanumeric character; this is equivalent to the class [^a-zA-Z0-9_].

我认为点,逗号,连字符,括号和撇号应匹配\ W.

问题: 的 1。我无法理解为什么:括号,点和逗号以及撇号仍然存在。

  1. 我会说我排除了撇号。我需要它,它存在于结果中,它是好的。但我无法理解它是如何发生的。 你能帮我理解结果中撇号是如何发生的。

  2. 嗯,“ - ”绝对是错误。如何应对?

  3. 请你,建议我一个更好的正则表达式。

1 个答案:

答案 0 :(得分:1)

你对“单词”的定义相当模糊,你可以提出:

import re

rx = re.compile(r'\s*(\S+)\s*')

string = """(CNN)Meaalofa Te'o -- Buemi. Canberra,"""
words = rx.findall(string)
print(words)
# ['(CNN)Meaalofa', "Te'o", '--', 'Buemi.', 'Canberra,']

请参阅a demo on ideone.comregex101.com。你可能会重新定义“单词”是什么。