首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如果我们知道每个字符的类型,如何构造任何字符串的regex模式?

如果我们知道每个字符的类型,如何构造任何字符串的regex模式?
EN

Stack Overflow用户
提问于 2019-06-19 11:34:02
回答 2查看 79关注 0票数 0

我需要为任何字符串构造regex模式,因为我们得到了以以下格式编码的每个字符的类型。

代码语言:javascript
运行
复制
N- Numericals A- Alphabets S- Special characters.

我将得到一个字符串格式,如- "NNNSSAAANSAA“,我需要为这些模式构造一个统一的正则表达式。

迄今所作的努力:

这是一个更大问题的一部分,就是要找到任何给定字符串的正则表达式。

为此,我已经分解到这个解决方案,打破成较小的令牌,然后统一。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-06-19 12:44:06

基于@ on 226答案中的regex模式,您可以使用itertools.groupby构造此模式。

代码语言:javascript
运行
复制
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)

指纹:

代码语言:javascript
运行
复制
\d{3}[^a-zA-Z\d]{2}[a-zA-Z]{3}\d[^a-zA-Z\d][a-zA-Z]{2}
票数 0
EN

Stack Overflow用户

发布于 2019-06-19 12:25:38

您说需要匹配以下类型的字符:

  • 数字
  • 字母表
  • 特殊字符

正则表达式引擎有(短手)字符类来完成这个任务。尝试:

  • 数字符号的[0-9],或它的简写符号:\d
  • 字母的[A-Za-z]
  • 用于特殊字符的[^A-Za-z0-9]。注意^,它的意思是“不匹配以下任何一项”。

现在您已经知道了如何匹配这些字符,我们需要一种方法来说明我们将接受多少个字符,这是用量词完成的

  • *指的是任何数字
  • +是指任何大于0的数字(即“至少存在一次”)
  • {n}意味着精确的n时间
  • {n,m}指的是nm之间的时间

因此,为了匹配您的示例:

代码语言:javascript
运行
复制
NNNSSAAANSAA

...you天真地可以用..。

代码语言:javascript
运行
复制
\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使用如下所示的量词缩短它:

代码语言:javascript
运行
复制
\d{3}[^A-Za-z0-9]{2}[A-Za-z]{3}\d[^A-Za-z0-9][A-Za-z]{2}

警告:处理Unicode的整个复杂性(例如,考虑罗马数字)的要比这困难得多,对于这些事情的支持在regex引擎实现之间有很大差异。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56666747

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档