2024-09-28 19:34:13 发布
网友
如何编写正则表达式来查找:
规则:
没有可能的正则表达式语言可以描述这一点,因为所描述的语言不是regular language。 引用上面的维基百科链接:
The collection of regular languages over an alphabet Σ is defined recursively as follows:The empty language Ø, and the empty string language {ε} are regular languages.For each a ∈ Σ (a belongs to Σ), the singleton language {a} is a regular language.If A and B are regular languages, then A ∪ B (union), A • B (concatenation), and A* (Kleene star) are regular languages.No other languages over Σ are regular.
The collection of regular languages over an alphabet Σ is defined recursively as follows:
没有固定字符串、并集、连接或Kleene星形操作(必须为零或更多,没有进一步的约束)的组合可以描述上述情况,因为没有允许长度匹配断言的运算符。(类似地,允许反向引用的“regex”语言也不是真正的regex语言)
因此,任何能够描述上述语言的“regex语法”都不是真正的正则表达式语法
下面的代码适用于上述场景,也适用于@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的字符串
A
B
输出
[('AA', 'BB', 'AA')]
当string = "AAABBBBBBAAA"
string = "AAABBBBBBAAA"
输出[]
[]
没有可能的正则表达式语言可以描述这一点,因为所描述的语言不是regular language。 引用上面的维基百科链接:
没有固定字符串、并集、连接或Kleene星形操作(必须为零或更多,没有进一步的约束)的组合可以描述上述情况,因为没有允许长度匹配断言的运算符。(类似地,允许反向引用的“regex”语言也不是真正的regex语言)
因此,任何能够描述上述语言的“regex语法”都不是真正的正则表达式语法
下面的代码适用于上述场景,也适用于@Cary Swoveland所说的例外情况
代码
您必须计算字符串中
A
的出现次数,因为您希望模式匹配具有相同数量B
的字符串输出
当
string = "AAABBBBBBAAA"
输出
[]
相关问题 更多 >
编程相关推荐