C# 正则表达式在带空格的整数中查找无效字符
我想使用正则表达式(regex)查找字符串中的无效字符。字符串是用户输入,当正则表达式发现无效字符时,我想给用户反馈哪些字符无效。示例警告消息:“仅允许0-9和空格。输入为C# 正则表达式在带空格的整数中查找无效字符,c#,regex,numbers,match,C#,Regex,Numbers,Match,我想使用正则表达式(regex)查找字符串中的无效字符。字符串是用户输入,当正则表达式发现无效字符时,我想给用户反馈哪些字符无效。示例警告消息:“仅允许0-9和空格。输入为“-10 a 0 b”时发现无效字符:ab” 有效字符串为: 整数 消极还是积极 允许在任何位置有任意数量的空白 例如,这些有效字符串不应与正则表达式匹配: "-100" "- 1 00" " - 1 00" "100" " 1 0 0 " "1 00" 虽然正则表达式应该在这些无效字符串中找到匹配项:
“-10 a 0 b”
时发现无效字符:ab”
有效字符串为:
- 整数
- 消极还是积极
- 允许在任何位置有任意数量的空白
"-100"
"- 1 00"
" - 1 00"
"100"
" 1 0 0 "
"1 00"
虽然正则表达式应该在这些无效字符串中找到匹配项:
"- 1 a 0 0 b" should match "a" and "b"
"- 1 a 0 0 -" should match "a" and "-"
我有一个适用于正整数的正则表达式,直到我发现我忘了包含负整数:
var regex = new Regex(@"[^0-9\s]")
var invalidCharacters = regex.Matches(text)
我对正则表达式只有非常基本的了解。我尝试对正则表达式求反以包含负整数,但它不起作用:
new Regex(@"(?!-?[0-9\s])")
我希望有人能帮我。如果可以通过删除空格要求更容易地解决这个问题。然后,请忽略空白部分。我将首先考虑正数-哪些字符串有效?然后用否定的眼光来否定它 我认为这符合您的要求:
(?!\s*-?[\d\s]).
将匹配开头的任何空白\s*
将可选地匹配连字符-?
将匹配数字和空格[\d\s]
是否定整个表达式的否定查找(?!expression)
- 末尾的
是生成匹配项的一种方法。负面环顾只是一个断言,它不会返回任何结果
var invalidCharacters = Regex.Matches(text, @"[^0-9\s-]|(?<!^\s*)-");
var invalidCharacters=Regex.Matches(文本,@“[^0-9\s-]”|(?是否“-1”
有效(即,-
符号前面的多个空格?@Nick是的,在-sign前面的多个空格是有效的。我将此添加到示例中。为什么-100
和100
无效?好的,使用var invalidCharacters=Regex.Matches(文本,@“[^0-9\s-]|(?不,。给我看代码的位置。结尾的
是什么意思?负面环顾只是一个断言。
允许正则表达式将结果具体化。好的,谢谢。两个答案都很有效。我会接受这个答案,因为我发现正则表达式更容易理解。