使用正则表达式匹配一组具有可变定位的数字?

Use Regex to match a set of numbers with variable positioning?

我正在尝试使用 RegEx 来匹配用户输入的一组数字。我希望用户提供 4 位数字的位置和值。这个想法是获取此信息,搜索列表和 return 10 位数字的 'matching numerical string' 当且仅当用户提供的数字位于正确的位置时。任何人都可以提供我可以使用的正则表达式吗?我束手无策,努力不被解雇。

快速更新示例:用户输入##2#5#8##9

应该匹配

1528578009 8324598769

不应该匹配

4726754839 5023859800

希望这有助于了解我正在尝试做什么。感谢回复

假设你的数据看起来像

0123456789
0103050709
0020406080
0123000000

你可以使用像^0123......$这样的正则表达式来匹配任何以“0123”作为前四位数字的字符串,匹配第一行和最后一行。同样,^.1.3.5.7..$ 将匹配在位置 2、4、6 和 8 中包含 1、3、5 和 7 的任何字符串,匹配前两行。

给定用户输入的整数对 dp 表示数字和位置,您可以轻松生成这样的正则表达式字符串。一种简单的方法是从字符串 "^..........$" 开始并将索引 p 处的每个字符替换为字符 d(如果索引是从一开始的。如果索引是从零开始的,则向 p 添加一)。确保 d 只是一个数字,并且 p 在适当的范围内。

如果您想更严格地使用正则表达式,请使用 \d 而不是 . 来匹配数字而不是任何字符。

据我了解您的意见是:

p1 v1

p2 v2

p3 v3

p4 v4

其中p是位置,v是数字的值。 如果是这种情况,请按位置的递增顺序排列它们,所以我假设 p1 < p2 < p3 < p4.

现在计算以下值:

a1 = p1 - 1

a2 = p2 - p1 - 1

a3 = p3 - p2 - 1

a4 = p4 - p3 - 1

a5 = 10 - p4

现在使用以下正则表达式

[1-9]{a1}v1[0-9]{a2}v2[0-9]{a3}v3[0-9]{a4}v4[0-9]{a5}

该方法是基于position以1为基础的。即最高位的位置被认为是 1 而不是 0。