有一天,我试图教一个学生正则表达式的原则-我远非一个专家,但想展示它的原则.我有一个文本文件,包含所有的英语单词,我想定义一系列的规则,在正则表达式,使唯一会出来的单词是"祝贺".

我们首先在Python代码中实现了它,然后使用re python库.前两条规则是找到第二个字母为O的单词,以及以ION结尾的单词.

虽然我们首先try 查找与规则匹配的单词,然后在纯Python语言中查找另一个单词,但我们try 使用正则表达式模式^.O[A-Z]*IONS$一步到位.我们惊讶地发现,这两种方法只有一个词不同:IONS.

我的意思是,这完全有意义,因为正则表达式模式根据定义查找至少6个字符的单词.但这让我们想知道是否有办法获得第二个字母为O的单词,也可以是单个正则模式中的ionic 的O.

我知道我们完全可以通过两个步骤来做到这一点,首先获得第二个字母为O的单词,然后获得这些单词中以ionic 结尾的单词,但我只是想知道是否可以单独一步完成.

推荐答案

简短的答案是:

^([A-Z]O[A-Z]*)?IONS$

解释:

使用维恩图.

  • 规则1:第二个字母为O的单词^.O或`^.O.*$
  • 规则2:以ion IONS$或`^.*ion$结尾的单词

在规则12的交集中

  • case 1最短的词是ionic ,
  • 5个字母都没有,第二个字母相互矛盾:rule 1个字母中有"O",而rule 2中有"I"
  • 6个字母及以上为case 2:你的图案就足够了.

 3 2的并集是IONS或你的模式

^(IONS|.O.*IONS)$还是^(IONS|.O.*IONS)$

但你可以把它简化为as @InSync commented

^(.O.*)?IONS$

如何&以及为什么?因为:

  • A: the word IONS satisfies both rules, satisfying one would would match IONS. Let's keep the stricter rule 2. IONS$
    • 4个字母的单词:^IONS$
  • B: there are 2 cases. We can make rule 1 optional (rule1)?, when matching:
    • 6个字母的单词^(.O)?IONS$
    • 6个以上字母单词^(.O.*)?IONS$

或者根据需要甚至更严格:如果‘Words’仅为A-Z

^([A-Z]O[A-Z]*)?IONS$

Python相关问答推荐

如何将自动创建的代码转换为类而不是字符串?

Pandas使用过滤器映射多列

Python中两个矩阵的自定义Hadamard风格产物

如何从格式为note:{neighbor:weight}的字典中构建networkx图?

Polars Select 多个元素产品

为什么dict(id=1,**{id:2})有时会引发KeyMessage:id而不是TypMessage?

如何使用Python中的clinicalTrials.gov API获取完整结果?

如果索引不存在,pandas系列将通过索引获取值,并填充值

当密钥是复合且唯一时,Pandas合并抱怨标签不唯一

根据条件将新值添加到下面的行或下面新创建的行中

Deliveryter Notebook -无法在for循环中更新matplotlib情节(保留之前的情节),也无法使用动画子功能对情节进行动画

如何检测背景有噪的图像中的正方形

在Mac上安装ipython

当独立的网络调用不应该互相阻塞时,'

有没有一种方法可以从python的pussompy比较结果中提取文本?

如何根据一列的值有条件地 Select 前N个组,然后按两列分组?

根据列值添加时区

Pandas GroupBy可以分成两个盒子吗?

在单次扫描中创建列表

如何过滤组s最大和最小行使用`transform`'