使用正则表达式提取字符串中不同范围内的数字



我想提取不同范围内的所有数字。

第一个范围:$ $
第二个范围:# #

提取第一范围内的所有数字

$1-2$

预期结果

1, 2 

$1#4#-2$

预期结果

1, 2

提取第二范围内的所有数字

$1-2#4-9-6#3-4$

预期结果

4, 9, 6

注意-用于分隔每个数字,每个范围中的数字数量可能会随的不同而不同

我当前的Regex:(^[$])([d]+)(|-d+)*(|#[d]+((|-d+)*)#)([$]+)($)

感谢您的帮助!

对于scope-1匹配,您可以使用以下正则表达式:

(?:$|(?!^)G(?:#[^#]*#)?-)Kd+(?=[-d#]*$)
# without K for Java
(?:$|(?!^)G(?:#[^#]*#)?-)(d+)(?=[-d#]*$)

RegEx Demo 1

对于范围2匹配,您可以使用以下正则表达式:

(?:#|(?!^)G(?:$[^$]*$)?-)Kd+(?=[d$-]*#)
# without K for Java
(?:#|(?!^)G(?:$[^$]*$)?-)(d+)(?=[-d$]*#)

RegEx Demo 2

RegEx分解:

  • G在前一个匹配的末尾或第一个匹配的字符串的开头断言位置。因此(?!^)G匹配上一个匹配结束时的位置
  • K:重置匹配信息
  • (?=[d$-]*#前瞻性地断言在匹配0个或多个数字/$/-之后我们存在#
  • (?=[d#-]*$前瞻性地断言在匹配0个或多个数字/#/-之后我们存在$

最新更新