我知道已经有一些文章试图解释RegEx字符串。但我还是不明白。就我而言,我需要一个用于WPF的正则表达式,该正则表达式仅允许“数字键盘”。它在代码中的位置:
private void NumberValidationTextBox(object sender, TextCompositionEventArgs e)
{
Regex regex = new Regex("[-+]?[0-9]*,?[0-9]*");
e.Handled = regex.IsMatch(e.Text);
}
所以这是一些示例编号,我需要允许: “ 1”或“ -1”或“ -0,5”或“ 4,00”或“ -3,56”或“ 3,3”或
“'-2,'为'-2,0'或'-2'”
(所以它的所有值都在-4到+4之间。可以有一个逗号,但是不必是逗号。如果有逗号,则需要后面的一或两位数字-不能多。也应该是一个“,”而不是“。”-这很重要) 有人知道如何编写此RegEx-String吗?谢谢
答案 0 :(得分:1)
简而言之,您所追求的并不那么复杂。
首先,最大/最小范围是-4到4。考虑到小数部分,您可以具有以下内容:CREATE KEYSPACE events WITH replication = {'class': 'SimpleStrategy', 'replication_factor': '3'} AND durable_writes = true;
CREATE TABLE events.customer (
branch text,
uniqueid bigint,
communication text,
firstname text,
isksfeemp int,
isobsolete int,
lastname text,
mobile text,
official text,
permanent text,
residential text,
temporary text,
PRIMARY KEY (branch, uniqueid)
) WITH CLUSTERING ORDER BY (uniqueid ASC)
AND bloom_filter_fp_chance = 0.01
AND caching = {'keys': 'ALL', 'rows_per_partition': 'NONE'}
AND comment = ''
AND compaction = {'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy', 'max_threshold': '32', 'min_threshold': '4'}
AND compression = {'chunk_length_in_kb': '64', 'class': 'org.apache.cassandra.io.compress.LZ4Compressor'}
AND crc_check_chance = 1.0
AND dclocal_read_repair_chance = 0.1
AND default_time_to_live = 0
AND gc_grace_seconds = 864000
AND max_index_interval = 2048
AND memtable_flush_period_in_ms = 0
AND min_index_interval = 128
AND read_repair_chance = 0.0
AND speculative_retry = '99PERCENTILE';
。因此,在这里,我们期望一个^[+-]?4(,0{1,2})?$
或+
(可选),数字4,可选地后面跟一个逗号和一个或两个0。
在您的情况下,我们现在需要匹配范围的中间值,即-3.99到3.99。这可以通过以下方式实现:-
。在这种情况下,我们也期望使用^[+-]?[0-3](,\d{1,2})?$
或+
(可选)。然后,我们希望匹配一个介于0和3之间的数字,并可以选择后面跟一个逗号和1或2个数字。
将它们组合在一起,最终得到的结果是:-
。可用的示例here。
编辑:
根据注释,您需要在^[+-]?((4(,0{1,2})?)|([0-3](,\d{1,2})?))$
前面转义,因为C#编译器将尝试为\d
找到特殊含义,就像它一样当您执行\d
或\n
时。最简单的方法是使用\t
字符,以便C#编译器以字符串形式威胁该字符串:@
。
答案 1 :(得分:0)
有许多用于测试正则表达式的在线网站,这些网站将分解匹配字符串并提供每个元素的解释,例如https://regex101.com/
您需要的是
optional '+' or '-'
either
a group consisting of
'4'
optionally followed by a group consisting of
',' and one or two '0'
or
a group consisting of
one character from '0' .. '3'
optionally followed by a group consisting of
',' and one or two characters from '0' to '9'
[+-]?(?:(?:4(?:,0{1,2})?)|(?:[0-3](?:,[0-9]{1,2})?))
答案 2 :(得分:0)
string s = "-3,5;10;8.5;0;2;3.5;1,5";
string pattern = @"^-?[0-4](,\d{1,2})?$";
foreach(var num in s.Split(";"))
{
Console.WriteLine($"Num: {num}, Matches: {Regex.IsMatch(num, pattern)}");
}