我正在尝试使用RegEx来匹配用户输入的一组数字。我希望用户提供4位数的位置和值。我们的想法是获取此信息,搜索列表并返回10位数的“匹配数字字符串”,当且仅当用户提供的数字位于正确位置时。任何人都可以提供我可以使用的正则表达式吗?我在我的智慧结束,并试图不被解雇。
使用示例进行快速更新:用户输入## 2#5#8 ## 9
应匹配
1528578009 8324598769
不匹配
4726754839 5023859800
希望这有助于了解我想要做什么。感谢您的回复
答案 0 :(得分:1)
据我所知,你的意见是:
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}
该方法基于位置为1的事实。这是最重要的数字位置被认为是1而不是0。
答案 1 :(得分:0)
假设您的数据类似于
0123456789
0103050709
0020406080
0123000000
你可以使用像^0123......$
这样的正则表达式来匹配任何字符串" 0123"作为前四位数,匹配第一行和最后一行。同样地,^.1.3.5.7..$
将匹配位置2,4,6和8中与1,3,5和7匹配的任何字符串,与前两行匹配。
如果用户输入了指示数字和位置的整数对 d 和 p ,则可以轻松生成这样的正则表达式字符串。一种简单的方法是从字符串"^..........$"
开始,并用索引 p 替换每个字符 d (如果索引是从一开始的话。如果索引从零开始,则一个到 p 。确保 d 只是一个数字,并且 p 在适当的范围内。
如果您希望对正则表达式更严格,请使用\d
代替.
来匹配数字而不是任何字符。