用于重复数字系列和数字范围的正则表达式(例如 3 位数字和 3 位数字范围)
Regex for repeating series of numbers and number ranges (e.g. 3 digit numbers and 3 digit number ranges)
我正在寻找匹配重复数字序列的正则表达式。 number/range 本身可以是任何三位数,例如我要匹配
345
346-348
234,235,236,237-239
234, 235, 236, 237-239
234,234, 236 and 237-239
234,234, 236 or 237-239
我不想配
3454
111-222-333
454,4567 (match only 454)
号码可以是任意三位数。我尝试了混合使用 \d{3} 的不同正则表达式,但我没有找到任何有效的方法。感谢对此的任何帮助。
您可以使用这个正则表达式:
^\d{3}(?:-\d{3})?(?:\s*(?:,|and|or)\s*\d{3}(?:-\d{3})?)*(?=,|$)
正则表达式详细信息:
^
: 开始
\d{3}
: 匹配3个数字
(?:-\d{3})?
:可选地后跟一个连字符和 3 个数字
(?:
: 启动非捕获组
\s*
:匹配0个或多个空格
(?:,|and|or)
:匹配逗号或and
或or
\s*
:匹配0个或多个空格
\d{3}
: 匹配3个数字
(?:-\d{3})?
:可选地后跟一个连字符和 3 个数字
)*
:启动非捕获组。重复此组 0 次或多次
(?=,|$)
:前瞻断言我们在当前位置之前有一个逗号或行尾
根据您展示的示例,请您尝试以下操作。
^\d{3}(?:-\d{3}$|(?:(?:,\s*\d{3}\s*){1,3}-\d{3})|(?:,\d{3},\s*\d{3}\s*(?:and|or)\s*\d{3}-\d{3})?)*(?=,|$)
解释: 为以上添加详细解释。
^\d{3} ##Checking from starting of value if value starts from 3 digits.
(?: ##Creating 1st capturing group here.
-\d{3}$| ##Matching - followed by 3 digits at end of value OR.
(?: ##Creating 2nd capturing group here.
(?:,\s*\d{3}\s*){1,3} ##In a non-capturing group matching ,\s* followed by 3 digits with \s* and this whole group 3 times.
-\d{3} ##Followed by - 3 digits.
)| ##Closing 2nd capturing group OR.
(?: ##Creating 3rd capturing group here.
,\d{3},\s*\d{3}\s* ##Matching , 3 digits, \s* 3 digits \s*
(?:and|or) ##Matching and OR or strings in a non-capturing group here.
\s*\d{3}-\d{3} ##Matching \s* followed by 3 digits-3digits
)? ##Closing 3rd capturing group keeping it optional.
) ##Closing 1st capturing group here.
*(?=,|$) ##nd matching its 0 or more matches followed by comma OR end of line.
我正在寻找匹配重复数字序列的正则表达式。 number/range 本身可以是任何三位数,例如我要匹配
345
346-348
234,235,236,237-239
234, 235, 236, 237-239
234,234, 236 and 237-239
234,234, 236 or 237-239
我不想配
3454
111-222-333
454,4567 (match only 454)
号码可以是任意三位数。我尝试了混合使用 \d{3} 的不同正则表达式,但我没有找到任何有效的方法。感谢对此的任何帮助。
您可以使用这个正则表达式:
^\d{3}(?:-\d{3})?(?:\s*(?:,|and|or)\s*\d{3}(?:-\d{3})?)*(?=,|$)
正则表达式详细信息:
^
: 开始\d{3}
: 匹配3个数字(?:-\d{3})?
:可选地后跟一个连字符和 3 个数字(?:
: 启动非捕获组\s*
:匹配0个或多个空格(?:,|and|or)
:匹配逗号或and
或or
\s*
:匹配0个或多个空格\d{3}
: 匹配3个数字(?:-\d{3})?
:可选地后跟一个连字符和 3 个数字
)*
:启动非捕获组。重复此组 0 次或多次(?=,|$)
:前瞻断言我们在当前位置之前有一个逗号或行尾
根据您展示的示例,请您尝试以下操作。
^\d{3}(?:-\d{3}$|(?:(?:,\s*\d{3}\s*){1,3}-\d{3})|(?:,\d{3},\s*\d{3}\s*(?:and|or)\s*\d{3}-\d{3})?)*(?=,|$)
解释: 为以上添加详细解释。
^\d{3} ##Checking from starting of value if value starts from 3 digits.
(?: ##Creating 1st capturing group here.
-\d{3}$| ##Matching - followed by 3 digits at end of value OR.
(?: ##Creating 2nd capturing group here.
(?:,\s*\d{3}\s*){1,3} ##In a non-capturing group matching ,\s* followed by 3 digits with \s* and this whole group 3 times.
-\d{3} ##Followed by - 3 digits.
)| ##Closing 2nd capturing group OR.
(?: ##Creating 3rd capturing group here.
,\d{3},\s*\d{3}\s* ##Matching , 3 digits, \s* 3 digits \s*
(?:and|or) ##Matching and OR or strings in a non-capturing group here.
\s*\d{3}-\d{3} ##Matching \s* followed by 3 digits-3digits
)? ##Closing 3rd capturing group keeping it optional.
) ##Closing 1st capturing group here.
*(?=,|$) ##nd matching its 0 or more matches followed by comma OR end of line.