1

我试图从字符串中取出字母和空格,但它保留\r\n了我不想要的结果。还有一个函数可以返回不包括我给它的正则表达式的结果?


我需要排除的代码\r\n

region = ",,,Central California\r\n"

#\w Matches word characters.
#\s Matches whitespace
print re.findall(r"[\w\s]+", region)

异常输出['Central California']

输出得到['Central California\r\n']


返回与正则表达式不匹配的所有内容

region = ",,,Central California\r\n"

#\W Matches nonword characters.
print re.exclude_function(r"[\W]+", region)

异常输出['Central California']


4

2 回答 2

3

在我看来,您正在解析一个 csv 文件。您应该考虑为此使用内置的 Python 库

要删除尾随换行符,您可以使用str.srip()

如果您想捕获每个片段中的所有内容,您可以做一些比这更简单的事情:

re.findall(r',?([^,]+)(?:,|\r\n)', string)
# this regex captures anything between `,` and/or a newline

用你的字符串显示它:

>>> s = ",,,Central California\r\n"
>>> re.findall(r',?([^,]+)(?:,|\r\n)', s)
['Central California']

有多个项目:

>>> s = ",itemA,itemB,Central California\r\n"
>>> re.findall(r',?([^,]+)(?:,|\r\n)', s)
['itemA', 'itemB', 'Central California']

>>> s = "BASE,itemA,itemB,Central California\r\n"
>>> re.findall(r',?([^,]+)(?:,|\r\n)', s)
['BASE', 'itemA', 'itemB', 'Central California']
于 2012-12-20T09:36:05.563 回答
1

\s包含\rand \n,所以只需使用

re.findall(r"[\w\t ]+", region)

取而代之"\t"的是(作为制表符并且" "是空格)。

如果您想要一个函数返回与您的正则表达式不匹配的所有内容,只需对其进行全部替换:

def exclude_function(regex, string):
    return re.sub(regex, "", string)
于 2012-12-20T09:33:14.813 回答