我正在尝试匹配格式为[integer] [冒号] [alphanum] [冒号] [整数]的字符串。例如,42100:ZBA01:20。我需要用冒号分开这些......
我想学习正则表达式,所以如果可以,请告诉我我做错了什么: 这就是我能够想到的......
^(\d):([A-Za-z0-9_]):(\d)+$
^(\d+)$
^[a-zA-Z0-9_](:)+$
^(:)(\d+)$
首先我尝试匹配字符串的部分,这些部分匹配整个字符串。你可以说,我对正则表达式不是很熟悉。
编辑:正则表达式用于输入桌面应用程序。我不确定使用什么'语言'或'类型'的正则表达式,所以我假设.NET。 我需要能够识别每个分组的字符,用冒号分割。因此,组#1应该是第一个整数,组#2应该是字母数字组,组#3应该是整数(范围1-4)。
提前谢谢你,
大流士
答案 0 :(得分:5)
我假设分号(;
)是冒号(:
)?好吧,有点基础。
^
匹配输入的开头。也就是说,只有在输入开头找到匹配项时,正则表达式才会匹配。$
匹配输入的结尾。 ^(\d+)$
将匹配仅 一个或多个数字的字符串。这是因为匹配需要从输入的开始处开始并在输入的结尾处停止。换句话说,整个输入需要匹配(而不仅仅是它的一部分)。 +
表示一个或多个匹配。
有了这些知识,你会发现^(\d):([A-Za-z0-9_]):(\d)+$
实际上非常接近正确。此表达式表示整个输入需要匹配:
问题显然在1和3中。您需要在那里添加+
量词以匹配一个或多个次而不是一次。此外,您希望将这些量词放置在捕获组中,以便在一个捕获组内获得多个匹配,而不是接收包含单个匹配的多个捕获组。
^(\d+):([A-Za-z0-9_]+):(\d+)$
答案 1 :(得分:3)
您需要使用量词
^(\d+):([A-Za-z0-9_]+):(\d+)$
^ ^ ^
+
是与先前模式1匹配多次的量词
现在您可以通过访问特定组
来访问这些值