Ede*_*der 3 c# regex filehelpers
我有一个平面文件中的以下输入(规则)(谈论数字输入):
1, 10, 100, 999, ..."1,000", "2,000", "3,000", "10,000", ...我有以下正则表达式来验证输入:(?:(\d+)|\x22([0-9]+(?:,[0-9]+)*)\x22),所以对于像10我期望在第一个匹配组中的输入10,这正是我得到的.但是当我得到一个像"10,000"我期望的第一个匹配组的输入10,000,但它存储在第二个匹配组.
string text1 = "\"" + "10,000" + "\"";
string text2 = "50";
string pattern = @"(\d+)|\x22([0-9]+(?:,[0-9]+){0,})\x22";
Match match1 = Regex.Match(text1, pattern);
Match match2 = Regex.Match(text2, pattern);
if (match1.Success)
{
Console.WriteLine("Match#1 Group#1: " + match1.Groups[1].Value);
Console.WriteLine("Match#1 Group#2: " + match1.Groups[2].Value);
# Outputs
# Match#1 Group#1:
# Match#1 Group#2: 10,000
}
if (match2.Success)
{
Console.WriteLine("Match#2 Group#1: " + match2.Groups[1].Value);
Console.WriteLine("Match#2 Group#2: " + match2.Groups[2].Value);
# Outputs
# Match#2 Group#1: 50
# Match#2 Group#2:
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,两者都在相同的匹配组上产生 1
对象文件
[FieldConverter(typeof(OOR_Quantity))]
public Int32 Quantity;
Run Code Online (Sandbox Code Playgroud)
OOR_Quantity
internal class OOR_Quantity : ConverterBase
{
public override object StringToField(string from)
{
string pattern = @"(?:(\d+)|\x22([0-9]+(?:,[0-9]+)*)\x22)";
Regex regex = new Regex(pattern);
if (regex.IsMatch(from))
{
Match match = regex.Match(from);
return int.Parse(match.Groups[1].Value);
}
throw new ...
}
}
Run Code Online (Sandbox Code Playgroud)
组编号纯粹基于它们在正则表达式中的位置来分配 - 具体地说,是开括号的相对位置,(.在你的正则表达式中,(\d+)是第一组,([0-9]+(?:,[0-9]+)*)是第二组.
如果要使用相同的标识符引用它们,请使用命名组并为它们指定相同的名称:
@"(?:(?<NUMBER>\d+)|\x22(?<NUMBER>[0-9]+(?:,[0-9]+)*)\x22)"
Run Code Online (Sandbox Code Playgroud)
现在,您可以将捕获的值检索为match.Groups["NUMBER"].Value.
| 归档时间: |
|
| 查看次数: |
465 次 |
| 最近记录: |