当前位置: 首页 > 知识库问答 >
问题:

正则表达式将10位数字与特定模式精确匹配

公孙霖
2023-03-14

假设我给出一个模式123*或1234*,我想匹配以该模式开头的任何10位数字。它应该正好有10个数字。

例子:

模式:123应该匹配1234567890但不匹配12345678

我试过这个正则表达式:(^(123)(\d{0,10}))(?(1)\d{10})。。很明显,它不起作用。我试着将图案和剩余的数字分成两组。它匹配捕获组后的10位数字(https://regex101.com/).如何检查捕获的组正好是10位数字?或者这里有什么好的诀窍吗。请引导我。

共有2个答案

祝俊
2023-03-14

我会保持简单:

import re

text = "1234567890"

match = re.search("^123\d{7}$|^1111\d{6}$", text)
if match:
    print ("matched")

只要把你的两个图案放进去就可以了!请注意,123*将捕获1234*所以我使用1111\d{6}作为示例

施俊远
2023-03-14

听起来像是一个积极展望的案例:

(?=123)\d{10}

这将匹配任何精确为10位的序列,但前提是前缀为123。在这里测试一下。

前缀1234类似:

(?=1234)\d{10}

当然,如果预先知道前缀长度,可以使用123\d{7},但是每次前缀更改都必须更改范围限制(例如:1234\d{6})。

此外,为确保仅捕获10位的孤立组,您可能希望使用(零长度)字边界\b来锚定上述表达式:

\b(?=123)\d{10}\b

或者,如果您的序列可以出现在单词内部,您可能希望在\d上使用负向后看和向前看(正如@Wiktor在评论中建议的那样):

(?<!\d)(?=123)\d{10}(?!\d)
 类似资料:
  • 问题内容: 我想检查一个字符串是否匹配1-2个字母,1-4个数字和1个字母的模式。(例如: CC44C , C4444C )。 我知道这将完全匹配2个字母,4个数字和1个字母的模式。(例如: CC4444C ) 但是,如何使它与范围(即1-2个字母,1-4个数字)匹配的模式呢? 我已经尝试过,但是它给了我以下错误: 问题答案: 您需要将{1-2}更改为{1,2},您可以理解为{minimun,ma

  • 有没有一种方法可以在python中编写与以下格式的字符串匹配的正则表达式: 或 在这里,$=表示零或更多的空白可以存在 :来自字符串的固定子集的字符串['feat','fix','docs','断'] :最大长度为n的字符串 :最大长度为m的字符串 前缀应该始终是一个字符串,之后是一些最大q长度的字母数字字符 注意:我们不能省略像应该使用与下面示例中所示完全相同的格式: feat(feat new

  • 有没有人试图描述与正则表达式匹配的正则表达式? 由于重复的关键字,这个主题几乎不可能在网上找到。 它可能在实际应用程序中不可用,因为支持正则表达式的语言通常具有解析它们的方法,我们可以将其用于验证,以及一种在代码中分隔正则表达式的方法,可用于搜索目的。 但是我仍然想知道匹配所有正则表达式的正则表达式是什么样子的。应该可以写一个。

  • 问题内容: 我有一个输入字符串。 我正在考虑如何有效地将此字符串与多个正则表达式匹配。 我想针对这些正则表达式模式进行匹配,如果其中至少一种匹配则返回: 我不确定如何一次匹配多种模式。有人可以告诉我我们如何有效地做到这一点吗? 问题答案: 如果只有几个正则表达式,并且在编译时都知道它们,那么这就足够了: 如果它们更多,或者它们在运行时加载,则使用模式列表:

  • 问题内容: 如何检查整个字符串是否可以与正则表达式匹配?在Java中是方法 问题答案: 您需要结合使用锚(字符串锚的开始)和字符串锚的结束,并通过以下选项进行操作: 或者,您可以传递一个选项数组,其中仅将模式锚定在字符串的开头,您可以省略,但仍然需要锚定在字符串末尾: 观看在线Swift演示 另外,在此处使用with 是一种替代方法: 根据ICU v3,使用正则表达式样式的比较,左手表达式等于右手

  • 问题内容: 我想搭配以下 com.my.company。 moduleA .MyClassName com.my.company。 moduleB .MyClassName com.my.company。 anythingElse .MyClassName 但 不是 以下 com.my.company。 核心 .MyClassName 我当前的简单正则表达式模式是: 因此,基本上,我该如何匹配其他