1

如何编写正则表达式来查找:

  • ABA
  • AABBAA
  • 啊啊啊啊啊
  • 啊啊啊啊啊啊
  • AAAABBBBBAAAAAA

规则:

  • 它总是以 A 开头和结尾
  • 中间总是有一个B
  • 第一组 A、中间的一组 B、第二组 A 的字母数量必须相同。
  • 必须一直有效到无穷大
4

2 回答 2

0

没有可能的正则表达式语言可以描述这一点,因为所描述的语言不是常规语言 引用上面的维基百科链接:

字母 Σ 上的常规语言集合递归定义如下:

  • 空语言 Ø 和空字符串语言 {ε} 是常规语言。
  • 对于每个 a ∈ Σ(a 属于 Σ),单例语言 {a} 是正则语言。
  • 如果 A 和 B 是正则语言,则 A ∪ B(并集)、A • B(串联)和 A*(Kleene 星号)是正则语言。
  • 没有其他超过 Σ 的语言是常规的。

没有固定字符串、联合、连接或 Kleene-star 操作(在没有进一步约束的情况下必须是零个或多个)的组合可以描述上述内容,因为没有允许长度匹配断言的运算符。(同样,允许反向引用的“正则表达式”语言也不是真正的正则表达式语言)。

因此,任何可以描述上述语言的“正则表达式语法”都不是真正的正则表达式语法。

于 2020-06-03T20:47:40.180 回答
0

下面的代码适用于上述场景,除了@Cary Swoveland 正在谈论的情况。

代码

import re
count = 0
string = "AABBAA"
for i in string:
    if i == string[0]:
        count +=1
    else:
        break
#count = 2
R = "^(A+)(B{" + str(count) + "})(\\1)$" #^(A+)(B{2})(\1)$
#print(R)
r = re.compile(R)
print(re.findall(r, string))

您必须计算A字符串中出现的次数,因为您希望模式匹配那些具有相同数量B(s)的字符串。

输出

[('AA', 'BB', 'AA')]

什么时候string = "AAABBBBBBAAA"

输出 []

于 2020-06-03T21:06:17.773 回答