C# 插入-每隔一个字符后插入
所以我正在用C#开发一个Unity 3D游戏。作为第一步,用户必须输入其个人代码,由5对组成,其中每对有2个字符/数字(Im分别验证字符和数字)。现在我想实现的是,当你输入信用卡号时,每一秒的字符后面都会出现一个负号,就像你在每四个数字后面看到的一样 示例:27-05-AB-CD-EF 现在我试着使用正则表达式,它对前两个字母起作用,但不知怎的,正则表达式也将负号视为一个字符,然后它无限频繁地添加负号。我尝试了不同的版本,我认为我只允许字母和数字,但不知何故,这不起作用C# 插入-每隔一个字符后插入,c#,regex,character,C#,Regex,Character,所以我正在用C#开发一个Unity 3D游戏。作为第一步,用户必须输入其个人代码,由5对组成,其中每对有2个字符/数字(Im分别验证字符和数字)。现在我想实现的是,当你输入信用卡号时,每一秒的字符后面都会出现一个负号,就像你在每四个数字后面看到的一样 示例:27-05-AB-CD-EF 现在我试着使用正则表达式,它对前两个字母起作用,但不知怎的,正则表达式也将负号视为一个字符,然后它无限频繁地添加负号。我尝试了不同的版本,我认为我只允许字母和数字,但不知何故,这不起作用 Regex.Replac
Regex.Replace(codeText, "([A-Za-z0-9][^-]){2}", "$0-");
猜猜怎么回事 尝试使用这个表达式
”([A-Za-z0-9]){2}(?!-)”
其中(?!-)
是一个零宽度负前瞻断言,如果您不知道它是一个匹配的表达式,但它不是匹配值的一部分。因此,此表达式匹配两个后面不跟-的字符。阅读本页了解更多信息如果输入了
27-05-AB-CD-EF
,您的意思是想将27-05-AB-CD-EF
作为输出吗?请尝试Regex.Replace(s,@“\w{2}(?=[^-]),“$0-”
。如果您不想匹配
s.”(([A-Za-z0-9]){2}[^-]),则正则表达式也可以看起来像@“[^\W}{2}(?=[^-])”
?(2个字符a-Z0-9不以a-)这样,如果您有5个字符串,并且希望一次使用string.Join(“-”,pairs)
,那么您将得到类似27-05-AB-CD-EF-
的结果。为了澄清,我的输入没有减号,我想在每个新字符后调用Regex.Replace。这也是一个输入字段,它是一个字符串。@MartinPfeifhofer我不知道你在说什么,你的问题中没有“游标”。发布你有问题的代码。这几乎可以完成任务,就像@Wiktor Stribiżew的答案一样。唯一的补充是,我必须将插入符号位置移动到Inputfield中的最后一个位置。@WiktorStribiżew实际上这不是同一个解决方案,您的解决方案稍微好一点,因为它不会插入另一个-在输入完所有10个字符之后。