我是Python的新手,但我需要帮助。我在这里搜索,google,文档,但没有任何效果。所以这就是我想要做的。
我有词(例如)" string" 然后我有单词列表:
字符串,字符串,str,ing,in,ins,rs,stress
我希望匹配如下: string,str,ing,in,ins,rs。
我不想匹配:压力,字符串(因为有2x s,而在单词字符串中,只有1)
抱歉英语不好,如果我解释得不够好。
是的,而且,有些字母是unicode。
答案 0 :(得分:3)
我认为你不能用正则表达式做到这一点,但我认为你可以用collections
来做到这一点:
>>> from collections import Counter
>>> target = "string"
>>> words = ["strings", "string", "str", "ing", "in", "ins", "rs", "stress"]
>>> [word for word in words if not Counter(word) - Counter(target)]
['string', 'str', 'ing', 'in', 'ins', 'rs']
答案 1 :(得分:1)
正则表达式可能不是最佳解决方案。这是一种算法:
string
,s
的键:值对将为{'s':1}
。答案 2 :(得分:1)
根据问题的精神,这是一个正则表达式的答案。
Here's the regex可以玩。
这是^(?=[string]{1,6}$)(?!.*(.).*\1).*$
这将检查string
内的1-6个字符。
下半部分确保没有重复。
当然,如果你的原始sstring
中有多个相同的字符,这种方法就会崩溃,而且对于长字符串来说它并不是特别有效。
为通用输入词运行它的代码:
import re
mylist = ["strings", "string", "str", "ing", "in", "ins", "rs", "stress"]
word = "string"
r = re.compile("^(?=[%s]{1,%d}$)(?!.*(.).*\1).*$" % (word, len(word)))
print filter(r.match, mylist)
打印:
['string','str','ing','in','ins','rs']
您可以使用代码here。
答案 3 :(得分:0)
我认为你完全不需要使用Python。如果我理解你很好,你只想得到字母不能重复的字样。
这个问题可以通过以下两行Python代码来解决。
str_list = [u'strings', u'string', u'str', u'ing', u'in', u'ins', u'rs', u'stress']
new_list = [i for i in str_list if len(set(i)) == len(i) ]
print new_list
该计划的输出是:
[u'string', u'str', u'ing', u'in', u'ins', u'rs']
对于unicode字符串,必须使用unicode字符串类或代码页。你不能使用utf-8表示法。
函数set
从可迭代对象创建唯一集。可迭代对象也是字符串。删除重复的字母。如果删除某些内容,则其长度不能与原始字符串相同。