gpt4 book ai didi

c# - 使用正则表达式匹配给定条件下的字符串

转载 作者:太空宇宙 更新时间:2023-11-03 22:51:21 24 4
gpt4 key购买 nike

[编辑] 注意:

最短的正则表达式是主要问题,而不是关于反向引用。


要求:

使用最短的正则表达式匹配以下格式的所有字符串:

<two digits><connect char><three digits><connect char><four digits>

为了便于阅读:

<two digits>
<connect char>
<three digits>
<connect char>
<four digits>

条件:

  • 匹配整个字符串,假设输入字符串是单行。
  • 连接字符可以省略,也可以是[-./]中的任何一个(不包括[])。
  • 每个匹配字符串中的两个连接字符必须相同
  • 最短很重要,性能不重要。

例子

一些有效的字符串:

55.635.8828
72/683/1582
86 942 7682
581827998 // Both connect chars is omit

一些无效的字符串:

56.855/9856     // Two connect chars are different.
56 4559428 // Same as above

这个简短的正则表达式将匹配所有有效的字符串:

^\d{2}[-./ ]?\d{3}[-./ ]?\d{4}$

但它也匹配无效的:

52-355/9984

此正则表达式将匹配所有正确的字符串,但相当长。为了便于阅读,我将其分成多行:

^(\d{2}-?\d{3}-?\d{4})|
(\d{2}\.?\d{3}\.?\d{4})|
(\d{2}/?\d{3}/?\d{4})|
(\d{2} ?\d{3} ?\d{4})$

你能建议我一个更短的符合要求的正则表达式吗?

最佳答案

您可以捕获分隔符并使用反向引用而不是重复模式

^\d\d([-./ ]?)\d{3}\1\d{4}$
^ ^ ^^

查看regex demo

在 C# 中:

var isValid = Regex.IsMatch(s, @"^\d\d([-./ ]?)\d{3}\1\d{4}$");

如果您只想将 ASCII 数字与 \d 匹配,请将 RegexOptions.ECMAScript 选项传递给正则表达式编译器(默认情况下,在 .NET 正则表达式中,匹配 all Unicode digits ).

图案细节

  • ^ - 字符串的开始
  • \d\d - 任意 2 位数字
  • ([-./]?) - 第 1 组捕获 1 或 0 -, ., / 或空格
  • \d{3} - 任意 3 位数字
  • \1 - 与第 1 组中捕获的值相同
  • \d{4} - 任意 4 位数字
  • $ - 字符串结尾(或者您可能想使用 \z 来确保字符串的确切结尾,但在大多数情况下没有必要这样做).

关于c# - 使用正则表达式匹配给定条件下的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47203132/

24 4 0
文章推荐: c# - MongoDb 驱动程序未插入整个对象
文章推荐: node.js - 使用 Electron 选择桌面屏幕的区域
文章推荐: c# - 如何使用 MathDotNet 库应用零相位滤波器?
文章推荐: jquery - 我想在通过 Bootstrap 的 "img-responsive"调整图像大小时调整
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com