Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python只重新匹配word中的字母_Python_Regex_Python 2.x - Fatal编程技术网

Python只重新匹配word中的字母

Python只重新匹配word中的字母,python,regex,python-2.x,Python,Regex,Python 2.x,我不熟悉Python re,但我需要帮助。我在这里搜索,谷歌,文档,但什么都没找到。这就是我要做的 我有单词(例如“string” 然后我有单词表: 字符串,字符串,str,ing,in,ins,rs,重音 我想匹配如下:string,str,ing,in,ins,rs 我不想匹配:重音、字符串(因为有2个s,而在单词字符串中只有1个) 只需匹配单词字符串中的字母即可 对不起,英语不好,如果我解释得不够好的话 是的,而且,有些字母是unicode。我不认为你可以用正则表达式来实现这一点,但我

我不熟悉Python re,但我需要帮助。我在这里搜索,谷歌,文档,但什么都没找到。这就是我要做的

我有单词(例如“string” 然后我有单词表:

字符串,字符串,str,ing,in,ins,rs,重音

我想匹配如下:string,str,ing,in,ins,rs

我不想匹配:重音、字符串(因为有2个s,而在单词字符串中只有1个)

  • 只需匹配单词字符串中的字母即可
对不起,英语不好,如果我解释得不够好的话


是的,而且,有些字母是unicode。

我不认为你可以用正则表达式来实现这一点,但我认为你可以用
集合来实现这一点:

>>> 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']

我不认为你能用正则表达式做到这一点,但我认为你能用
集合做到这一点:

>>> 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']

正则表达式可能不是最好的解决方案。这里有一个算法:

  • 为你的目标单词编一本字典,每个字母都是一个键,值是单词中该字母的数量。e、 g.对于
    string
    s
    的key:value对将是
    {'s':1}
  • 对于要测试的每个单词,请检查字典中是否有每个字母,并且字母计数不超过目标单词中的计数

    • 正则表达式可能不是最好的解决方案。这里有一个算法:

      • 为你的目标单词编一本字典,每个字母都是一个键,值是单词中该字母的数量。e、 g.对于
        string
        s
        的key:value对将是
        {'s':1}
      • 对于要测试的每个单词,请检查字典中是否有每个字母,并且字母计数不超过目标单词中的计数

      我认为您完全不需要使用Python re。如果我能很好地理解你,你只想得到那些字母不能重复的单词

      这个问题可以用下面两行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
      createunique从iterable对象设置。iterable对象也是字符串。重复的字母将被删除。如果删除某些内容,则长度不能与原始字符串相同。

      我认为完全不需要使用Python re。如果我能很好地理解你,你只想得到那些字母不能重复的单词

      这个问题可以用下面两行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
      createunique从iterable对象设置。iterable对象也是字符串。重复的字母将被删除。如果删除了某些内容,则长度不能与原始字符串相同。

      本着问题的精神,这里是一个正则表达式的答案

      它是
      ^(?=[string]{1,6}$)(?!.*(。。。。.*$

      这将检查
      字符串中是否出现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']


      您可以使用代码。

      根据问题的精神,这里有一个正则表达式的答案

      它是
      ^(?=[string]{1,6}$)(?!.*(。。。。.*$

      这将检查
      字符串中是否出现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']


      您可以使用代码。

      对不起,我没有提到-我使用了大量的单词。。。。。所以这个方法需要非常长的时间。有了re,我在7秒内就完成了(但我找不到我正在搜索的函数)。编辑:我可以将这些合并得到结果。非常感谢。@MakaloneLOgman-我记得你说过你不能让正则表达式工作。这是一个很好的例子。我想你可以通过预计算
      计数器(目标)
      来加快速度。对不起,我没有提到-我使用了大量的单词。。。。。所以这个方法需要非常长的时间。有了re,我在7秒内就完成了(但我找不到我正在搜索的函数)。编辑:我可以将这些合并得到结果。非常感谢。@MakaloneLOgman-我记得你说过你不能让正则表达式工作。这是一个很好的例子。我想你可以通过预计算
      计数器(目标)