我需要为任何字符串构造regex模式,因为我们得到了以以下格式编码的每个字符的类型。
N- Numericals A- Alphabets S- Special characters.
我将得到一个字符串格式,如- "NNNSSAAANSAA“,我需要为这些模式构造一个统一的正则表达式。
迄今所作的努力:
这是一个更大问题的一部分,就是要找到任何给定字符串的正则表达式。
为此,我已经分解到这个解决方案,打破成较小的令牌,然后统一。
发布于 2019-06-19 12:44:06
基于@ on 226答案中的regex模式,您可以使用itertools.groupby
构造此模式。
from itertools import groupby
s = 'NNNSSAAANSAA'
pattern = ''.join({'N':r'\d', 'A':r'[a-zA-Z]', 'S':r'[^a-zA-Z\d]'}[v] + '{%s}' % len(list(g)) for v, g in groupby(s)).replace('{1}', '')
print(pattern)
指纹:
\d{3}[^a-zA-Z\d]{2}[a-zA-Z]{3}\d[^a-zA-Z\d][a-zA-Z]{2}
发布于 2019-06-19 12:25:38
您说需要匹配以下类型的字符:
正则表达式引擎有(短手)字符类来完成这个任务。尝试:
[0-9]
,或它的简写符号:\d
[A-Za-z]
[^A-Za-z0-9]
。注意^
,它的意思是“不匹配以下任何一项”。现在您已经知道了如何匹配这些字符,我们需要一种方法来说明我们将接受多少个字符,这是用量词完成的
*
指的是任何数字+
是指任何大于0的数字(即“至少存在一次”){n}
意味着精确的n
时间{n,m}
指的是n
和m
之间的时间因此,为了匹配您的示例:
NNNSSAAANSAA
...you天真地可以用..。
\d\d\d[^A-Za-z0-9][^A-Za-z0-9][A-Za-z][A-Za-z][A-Za-z]\d[^A-Za-z0-9][A-Za-z][A-Za-z]
...and使用如下所示的量词缩短它:
\d{3}[^A-Za-z0-9]{2}[A-Za-z]{3}\d[^A-Za-z0-9][A-Za-z]{2}
警告:处理Unicode的整个复杂性(例如,考虑罗马数字)的要比这困难得多,对于这些事情的支持在regex引擎实现之间有很大差异。
https://stackoverflow.com/questions/56666747
复制相似问题