【问题标题】:Finding all words with length 0 - 4 for a regular expression (method?)为正则表达式查找长度为 0 - 4 的所有单词(方法?)
【发布时间】:2019-10-09 19:15:19
【问题描述】:

我有一个由 0 和 1 组成的字母表和一个正则表达式,例如:1*(011+)*1*。现在我将找到该语言中所有长度为 0 - 4 且符合正则表达式的单词。所以输出将是: 111011111 ...等

我不应该给出单词或数字的列表作为参数,但是该方法应该自己生成所有这些单词。 re. 模块中是否有一个函数或方法可以做到这一点?

【问题讨论】:

  • ^\w{0,4}$....
  • 所以它会是:def....:return re.^\w{0,4}$?抱歉,我不熟悉方法
  • 欢迎来到 Stack Overflow!请阅读help pages,获取SO tour,了解how to ask good questions,以及此question checklist。另请了解如何创建minimal reproducible example。你应该edit你的问题向我们展示你到目前为止所做的事情。
  • 网上资源很多。import re; s = your_string; re.search(r'^\w{0,4}$', s)
  • 我知道你的意思。但是我想生成所有这些长度为 0-4 的单词,然后将它们与我上面提到的正则表达式 (1*(011+)*1*

标签: python regex word generate


【解决方案1】:

标准库中没有生成所有长度为 0-4 的字符串只包含字符 0 和 1 的函数,但构建一个并不难。

二进制数的特殊情况

请注意,您要检查的所有字符串都是低于 16 的二进制表示(= 10000 二进制)。

import re

def binary_numbers_below(n):
    return [bin(k)[2:] for k in range(n)]

for word in binary_numbers_below(2**4):
    if re.fullmatch('1*(011+)*1*'):
        print(word) # word is part of your language

需要将bin(k)的前两个字符截掉,因为bin(k)0b1000的形式输出数字,而我们不想要0b前缀。

一般情况

如果你想为任何给定的字母表生成所有特定长度的单词,你需要做更多的工作:

import re
from itertools import product

def words_of_alphabet(alphabet, min_length, max_length):
    return [''.join(characters) 
            for length in range(min_length, max_length+1) 
            for characters in product(alphabet, repeat=length)]

for word in words_of_alphabet(['0', '1'], 0, 4):
    if re.fullmatch('1*(011+)*1*'):
        print(word) # word is part of your language

words_of_alphabet(['0', '1'], 0, 4) 也会包含空字,而第一种方法不包含。


使用generators,您可以更优雅地编写这两个函数

def binary_numbers_below(n):
    for k in range(n):
        yield bin(k)[2:]
def words_of_alphabet(alphabet, min_length, max_length):
    for length in range(min_length, max_length+1):
        for characters in product(alphabet, repeat=length):
            yield ''.join(characters)

【讨论】:

    猜你喜欢
    • 2015-06-23
    • 1970-01-01
    • 2020-04-12
    • 1970-01-01
    • 2017-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-30
    相关资源
    最近更新 更多