Python分裂,多个分隔符不起作用

时间:2016-04-12 17:01:15

标签: python regex string parsing split

我有一个字符串:

feature.append(freq_and_feature(text,freq))

我想要一个包含字符串每个单词的列表,比如[feature,append,freq,and feature,text,freq],当然每个单词都是一个字符串。

这些字符串包含在一个名为helper.txt的文件中,所以我正在执行以下操作,正如多个SO帖子所建议的那样,就像这个帖子的接受答案一样(Python: Split string with multiple delimiters):

import re
with open("helper.txt", "r") as helper:
    for row in helper:

       print re.split('\' .,()_', row)

然而,我得到以下内容,这不是我想要的。

['    feature.append(freq_pain_feature(text, freq))\n']

4 个答案:

答案 0 :(得分:3)

您似乎想要使用非单词或下划线字符拆分字符串。使用

import re
s = 'feature.append(freq_and_feature(text, freq))'
print([x for x in re.split(r'[\W_]+', s) if x])
# => ['feature', 'append', 'freq', 'and', 'feature', 'text', 'freq']

请参阅IDEONE demo

[\W_]+正则表达式匹配1 +个不是单词(\W = [^a-zA-Z0-9_])或下划线的字符。

如果从输入字符串中删除初始和尾随的非单词字符,则可以删除if x,例如re.sub(r'^[\W_]+|[\W_]+$', '', s)

答案 1 :(得分:1)

...
private Object lock = new Object(); //semaphore

//override LinkedList's implementations...
@Override
public <T> remove(int index) { synchronized(lock) { return super.remove(index); } }
...

这将查找要拆分的字符串re.split('\' .,()_', row) 。你可能意味着

' .,()_

re.split('[\' .,()_]', row) 正则表达式作为第一个参数。要在正则表达式中说“这个或那个”,您可以写re.split,它将匹配a|ba。如果您撰写b,则只会匹配ab后跟a。幸运的是,所以我们不必写b,这是一个很好的形式,您可以使用'| |.|,|(|...来声明内部的所有内容都应该被视为“匹配其中一个”。

答案 2 :(得分:1)

我认为你试图在non-word字符的基础上分裂。它应该是

re.split(r'[^A-Za-z0-9]+', s)

[^A-Za-z0-9]可以翻译为 - &gt; [\W_]

Python代码

s = 'feature.append(freq_and_feature(text, freq))'
print([x for x in re.split(r'[^A-Za-z0-9]+', s) if x])

这也有效,确实

p = re.compile(r'[^\W_]+')
test_str = "feature.append(freq_and_feature(text, freq))"
print(re.findall(p, test_str))

<强> Ideone Demo

答案 3 :(得分:1)

你可以试试这个

str = re.split('[.(_,)]+', row, flags=re.IGNORECASE)
str.pop()
print str

这将导致:

['feature', 'append', 'freq', 'and', 'feature', 'text', ' freq']