如何使正则表达式匹配的一部分成为可选?

2024-01-31

这是一个示例字符串:

123456#p654321

目前,我正在使用这场比赛来捕捉123456 and 654321分为两个不同的组:

([0-9].*)#p([0-9].*)

但有时,#p654321字符串的一部分不会存在,所以我只想捕获第一组。我试图通过附加使第二组“可选”?到它,这有效,但只有当有一个#p在剩余字符串的末尾。

解决这个问题的最佳方法是什么?


你有#p在捕获组之外,这使得它成为结果的必需部分。您还使用了点字符 (.) 不当。点(在大多数正则表达式变体中)将匹配任何字符。将其更改为:

([0-9]*)(?:#p([0-9]*))?

The (?:)语法是获取非捕获组的方式。然后,我们只捕获您感兴趣的数字。最后,我们将整个事情设为可选。

此外,大多数 reg-ex 变体都有一个\d数字的字符类。所以你可以进一步简化:

(\d*)(?:#p(\d*))?

正如另一个人指出的那样,*运算符可能会匹配zero数字。为了防止这种情况发生,请使用+运算符改为:

(\d+)(?:#p(\d+))?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使正则表达式匹配的一部分成为可选? 的相关文章

  • 正则表达式 匹配捕获组内的文本

    示例文本 ruby object DynamicAttribute attributes resource id 1 resource type Applicant string value Michael int value id 359
  • 如何对逗号和句号使用 re.split?

    我有多个字符串 其中单词用逗号或句点分隔 string apple pear grapes carrot cabbage veggies fruit yard 我想根据逗号和句点来分割它 string apple pear grapes c
  • 正则表达式从 img 标签获取 src 值

    我正在使用以下正则表达式来获取src第一个的值imgHTML 文档中的标签 string match src
  • javascript从字符串创建不区分大小写的正则表达式

    我试图通过以不区分大小写的方式将输入与正则表达式匹配来进行验证 正则表达式作为对象上的字符串从服务中下来 我可能会得到类似的东西 regex ane 我可以执行以下操作 var rx new RegExp object regex The
  • 简单的 preg_replace 返回 null

    为什么这个非常简单的 preg replace 返回 null preg replace s test test 这个想法是删除空格 您忘记添加分隔符 preg replace s test test 而且最好使用 s 代替 s 在你的模式
  • Perl 正则表达式匹配模式的多个实例并替换

    我有一个看起来像这样的字符串 abc 1 2 3 something here foo 10 6 34 somethingelse here def 1 2 another 我想将此字符串拆分为一个数组 其中包含 abc 1 2 3 som
  • 使用 Vala 和 GLib 的正则表达式

    有没有一个函数 比如http php net manual en function preg match all php http php net manual en function preg match all php 使用 GLibh
  • Notepad++:: 通过正则表达式完全删除包含问号的行

    嗯 我想这就是我的标题 这对于我将要实现的目标来说是不言自明的 这是我当前的文本文件的示例 Diva was the winning song of the Eurovision Song Contest 1998 Who will win
  • 正则表达式 - 从行首和行尾修剪空格[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions Link
  • 修改排序比较器内的字符串

    我有以下代码 在排序比较器中 它在进行比较之前删除前缀字符串 print for sort a s STRING b s STRING foo a cmp foo b a 尽管比较和顺序是正确的 但前缀字符串已从输出中删除 以下保留前缀字符
  • C# 验证用户输入(如信用卡号)

    这是为了一个任务 我需要为三明治店创建一个程序 其中一部分是验证用户的付款信息 本次作业的指导方针是 信用卡号码必须为16位数字 前 4 位数字必须是以下数字之一 1298 1267 4512 4567 8901 8933 到期日期必须为
  • regex.replace 查询字符串参数

    我不知道这是否可能 我有以下正则表达式 string sTest test aspx width 100 height 200 ltTest Text Regex Replace sTest lt
  • Java 中的正则表达式,\\s 与 \\s+

    下面两个表达式有什么区别 x x replaceAll s x x replaceAll s 第一个匹配单个空格 而第二个匹配一个或多个空格 它们是所谓的正则表达式量词 它们执行像这样的匹配 取自文档 http docs oracle co
  • 使用正则表达式解析 Snort 警报文件

    我正在尝试使用 Python 中的正则表达式从 snort 警报文件中解析出源 目标 IP 和端口 和时间戳 示例如下 03 09 14 10 43 323717 1 2008015 9 ET MALWARE User Agent Win9
  • 为什么“script”命令会生成 ^[ 和 ^M 字符以及如何使用 vim 搜索和替换删除它们?

    在linux上 使用bash shell 当我使用script命令时 生成的文件称为typescript 当我用 vim 打开该文件时 每一行都包含 M字符 并且有几行 由于我的彩色命令提示符 包含一个字符 我想用任何东西替换这些字符 从而
  • 正则表达式仅匹配字母

    如何编写仅匹配字母的正则表达式 使用字符集 a zA Z 匹配 A Z 中的一个小写和大写字母 a zA Z 匹配一个或多个字母并且 a zA Z 仅匹配仅由一个或多个字母组成的字符串 and 分别标记字符串的开始和结束 如果您想匹配除 A
  • 使用 JavaScript 正则表达式分割字符串但保留分隔符?

    我收到如下输入 F12T213B1239T2F13T341F324 我必须按字母和后面的数字对其进行分组 所以理想的输出是 F12 T213 B1239 T2 F13 T341 F324 然后根据数字所带有的字母对数字进行一些处理 字母是固
  • 正则表达式排除双空格

    我正在寻找 c asp net 3 5 的正则表达式 如果句子或单词组中存在任何双空格 该正则表达式将会失败 the cat chased the dog true the cat chased the dog false doubles
  • 为字符串列表创建正则表达式

    I have extracted a series of tables from the scientific literature which consist of columns each of which is a distinct
  • 具有条件的重复行 pandas dataframe python

    我的数据框有问题 我的 df 是 product power brand product 1 3 x 1500W brand A product 2 2x1000W 1x100W product 3 1x1500W 1x500W brand

随机推荐