[英]Regex optional matching with letters numbers and symbols
我正在寻找具有以下详细信息的正则表达式模式
%
、 @
、 /
、 -
等2342 34534 2342
。 但是345345 / 435
或236 545
比赛
"1"
"12"
"12 34"
"12 a 34"
"1a"
"54b"
"32 c"
"43-23"
"45 c/34"
"45/34 d"
"67 / 345"
"23a / 56"
"12 / 56B"
只是为了更具体。 以下不应该匹配
"1 3 5"
"34 a a"
"34b s"
"56/v"
"234 / a"
"234a/a"
"34b 456s"
"34b/456s"
"34b / 456s"
我目前的尝试是^\\d+[\\s]?[az\\W]?[\\s]?[\\W]?[\\s]?\\d+?[az]?$
尽管我很可能需要多个模式(对于符号两侧的字母),但我的主要问题是试图获得?
正常工作,即使用当前模式 ID 期望获得更多正面
更新
当前正则表达式产生以下结果。
Good list
-------------
False - 1 <= this should match
True - 12 34
True - 12 a 34
False - 1a <= this should match
True - 54b
False - 32 c <= this should match
True - 43-23
True - 45c/34
True - 45/34d
True - 67 / 345
True - 23a / 56
True - 12 / 56b
Bad list
-------------
False - 1 3 5
False - 34 a a
False - 34b s
False - 234a/a
True - 34b 456s <= these are false positives only because they have 2 letters
True - 34b/456s
True - 34b / 456s
忽略误报,我可以通过创建 2 个模式来修复,我一直在思考为什么当前的正则表达式与指出的那些不匹配。
根据您的描述,我建议采用以下模式:
^\d+\s?(?:\W\s?\d+(?:\s?[a-z])?|(?:\d+\s?)?[a-z]?|[a-z]\s?\W\s?\d+)$
示例代码:
using System;
using System.Text.RegularExpressions;
using System.Collections.Generic;
public class Program
{
public static void Main()
{
var goodList = new List<string>{"1", "12", "12 34","12 a 34", "1a", "54b", "32 c", "43-23", "45c/34", "45/34d", "67 / 345", "23a / 56", "12 / 56b"};
var badList = new List<string>{"1 3 5", "34 a a", "34b s", "234a/a", "34b 456s", "34b/456s", "34b / 456s"};
var pattern = @"^\d+\s?(?:\W\s?\d+(?:\s?[a-z])?|(?:\d+\s?)?[a-z]?|[a-z]\s?\W\s?\d+)$";
var regex = new Regex(pattern);
Console.WriteLine("Good list");
Console.WriteLine("-------------");
foreach (var item in goodList)
{
Console.WriteLine(string.Format("{0} - {1}", regex.IsMatch(item), item));
}
Console.WriteLine();
Console.WriteLine("Bad list");
Console.WriteLine("-------------");
foreach (var item in badList)
{
Console.WriteLine(string.Format("{0} - {1}", regex.IsMatch(item), item));
}
}
}
你也可以试试这个。
(?im)^(?!(?:\d+\s){2}\d+\s*$)[^a-z\n]*(?:(?:\d\s?)[a-z])?[^a-z\n]*$
.NET regex tester中的Demo,请点击标签、 [table]
和[context]
了解更多匹配信息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.