python - 为正则表达式查找长度为 0 - 4 的所有单词(方法?)
问题描述
我有一个由 0 和 1 组成的字母表和一个正则表达式,例如:1*(011+)*1*
. 现在我将找到该语言中所有长度为 0 - 4 且符合正则表达式的单词。所以输出将是:
,
1
, 11
, 011
, 111
... 等。
我不应该将单词或数字列表作为参数,但该方法应该自己生成所有这些单词。模块中是否有一个函数或方法re.
可以做到这一点?
解决方案
标准库中没有函数可以生成长度为 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)
还将包括空词,而第一种方法不包括。
使用生成器,您可以更优雅地编写这两个函数
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)
推荐阅读
- r - 根据分类变量的级别增加变量的数值
- android - PKI 在 Android 手机上不可选择
- javascript - onChange 事件处理程序的刷新问题
- javascript - 如何从 chrome.windows 创建的新弹出窗口中获取当前活动选项卡
- python - 转置密码高级应用查询
- gitlab - 变量优先级在下游 GitLab 项目中未按预期工作
- accessibility - 重复的小部件(例如:桌面和移动菜单同时出现)是否违反 WCAG?
- php - 突出显示单个页面的 wordpress 导航链接
- javascript - 复选框选择所有逻辑反应js。之后如何取消选择?
- python - 如何让代码向后跳转而不是向前跳转?