我有一个字符串:
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']
答案 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|b
或a
。如果您撰写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']