C# 行中的子字符串的正则表达式
我有一行XX,VV,A01,A02,A03,A11,A12,A13,A14,B11,B12,B13,ZZ,DD 我需要一个正则表达式C# 行中的子字符串的正则表达式,c#,regex,C#,Regex,我有一行XX,VV,A01,A02,A03,A11,A12,A13,A14,B11,B12,B13,ZZ,DD 我需要一个正则表达式 如果我在我的行中发现A01、A02、A03或A11、A12、A13、A14,我必须用“AA”替换 如果我发现B11、B12、B13,我必须用“BB”替换 我试过使用 if (Regex.IsMatch(Value, "^A0[2-9]")|| Regex.IsMatch(Value, "^A1[0-5]")) 它不起作用——所以基本上如果我有A02,A03,A0
if (Regex.IsMatch(Value, "^A0[2-9]")|| Regex.IsMatch(Value, "^A1[0-5]"))
它不起作用——所以基本上如果我有A02,A03,A04,A05,A06,A07或A10,A11,A12。。。。。。。A15,我必须替换为“AA”您必须从表达式中删除
^
,如A0[2-9]
。因为结果不在表达式(^)的开头
描述
(?:(?:[AB](?=0[2-9]| 1[0-5]))[0-9]{2}((?=,\s*\1),|)*
替换为:$1$1
此正则表达式将执行以下操作:
- 查找
-A02
或A15
-B02
B15
- 将整个运行替换为
或AA
BB
XX,VV,A01,A02,A03,A11,A12,A13,A14,B11,B12,B13,ZZ,DD
样本匹配
XX、VV、A01、AA、BB、ZZ、DD
解释
节点说明
----------------------------------------------------------------------
(?:组,但不捕获(0次或更多次)
(匹配尽可能多的金额):
----------------------------------------------------------------------
(组和捕获到\1:
----------------------------------------------------------------------
(?:组,但不捕获:
----------------------------------------------------------------------
[AB]任何字符:“A”、“B”
----------------------------------------------------------------------
(?=向前看,看看是否有:
----------------------------------------------------------------------
0 '0'
----------------------------------------------------------------------
[2-9]任何“2”到“9”的字符
----------------------------------------------------------------------
|或
----------------------------------------------------------------------
1 '1'
----------------------------------------------------------------------
[0-5]任何“0”到“5”的字符
----------------------------------------------------------------------
)展望的结束
----------------------------------------------------------------------
)分组结束
----------------------------------------------------------------------
)结束\1
----------------------------------------------------------------------
[0-9]{2}“0”到“9”的任何字符(2次)
----------------------------------------------------------------------
(?:组,但不捕获:
----------------------------------------------------------------------
(?=向前看,看看是否有:
----------------------------------------------------------------------
, ','
----------------------------------------------------------------------
\s*空格(\n、\r、\t、\f和“”)
(0次或更多次(匹配最大
(可能的金额)
----------------------------------------------------------------------
\1与捕获匹配的内容\1
----------------------------------------------------------------------
)展望的结束
----------------------------------------------------------------------
, ','
----------------------------------------------------------------------
|或
----------------------------------------------------------------------
)分组结束
----------------------------------------------------------------------
)*分组结束
----------------------------------------------------------------------
从给定的输入字符串XX,VV,A01,A02,A03,A11,A12,A13,A14,B11,B12,B13,ZZ,DD
,您想要的输出字符串应该是什么样子?您好。你能不能给一个正则表达式来代替a而不是B的XX,VV,A02,A03,A11,A12,A13,A14,ZZ,DD,用XX,VV,AA,ZZ,DD代替其中的一些,上面写着无法识别的转义序列。Thanks@Kathy对于给定的字符串,XX,VV,A01,A02,A03,A11,A12,A13,A14,ZZ,DD
所需的字符串是什么样子的?我希望这个XX,VV,AA,ZZ,DD来自XX,VV,A02,A03,A11,A12,A13,A14,ZZ,DD对regex来说是如此陌生。请帮忙!所以你的整个问题有点让人困惑,但是(?:((?:[AB](?=[0-9]{2}))[0-9]{2}(?:(?=,\s*\2),|)*
这个正则表达式将把你的示例字符串转换成XX,VV,AA,ZZ,DD
。当然,如果您输入的字符串还包含B01、B02…
,那么它也将替换这些字符串。要限制此行为,只需将[AB]
部分中的字母更改为您希望匹配的字母即可。另请参见,非常感谢您的回复。但这是将整个样本输入替换为AA,而将其他样本排除在外。我不希望这样,它应该只替换A,保持其他的不变。
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;
using System.Text.RegularExpressions;
public static class Sample1
{
public static void Main()
{
var sampleInput = "XX,VV,A01,A02,A03,A11,A12,A13,A14,B11,B12,B13,ZZ,DD";
var results = Regex.Replace(sampleInput, "A0[2-9]|A1[0-5]", "AA");
Console.WriteLine("Line: {0}", results);
}
}