WPF中的RegularExpression

时间:2018-12-04 08:22:21

标签: c# regex

我知道已经有一些文章试图解释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吗?谢谢

3 个答案:

答案 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)}");
}