我有一个正则表达式匹配字符串;
public static string RegExMatchString = "(?<NVE>.{20})(?<SN>.{20})(?<REGION>.{4})(?<YY>\\d{4})(?<Mo" +
"n>\\d{2})(?<DD>\\d{1,2})(?<HH>\\d{2})(?<Min>\\d{2})(?<SS>\\d" +
"{2}).{6}(?<USER>.{10})(?<SCANTYPE>.{2})(?<IN>.{4})(?<OU" +
"T>.{4})(?<DISPO>.{2})(?<ROUTE>.{7})(?<LP>.{16})(?<POOL>.{3})" +
"(?<CONT>.{9})(?<REGION_L>.{18})(?<CAT>.{2})";
我将其替换为
public string RegExReplacementString = "LogBarcodeID ( \"${NVE}\", ID2: \"${SN}\", Scanner: \"${USER}" +
"\", AreaName: \"${REGION_L}${CAT}${SCANTYPE}\", TimeStamp: \"${YY}/${Mon}/${D" +
"D} ${HH}:${Min}:${SS} \") ";
我需要从这三个变量中删除所有尾随和前面的空格;
${REGION_L}
${CAT}
${SCANTYPE}
我应该如何更改RegExReplacementString(或RegExMatchString)以便实现这一目标?
示例输入是:
0034025876080795786104041811071 135 20150304111404 DFRANZ 61 9990020569910 DA ST6007 135 F
目前,我将相关部分视为
AreaName: "135 F61"
但是我需要获得AreaName:&#34; 135F61&#34;
修改 我正在从文本文件中读取正则表达式匹配字符串。并启动正则表达式;
RegExMatchString = File.ReadAllText(regexMatchStringPath);
regex = new Regex( RegExMatchString ,
RegexOptions.IgnoreCase | RegexOptions.CultureInvariant
| RegexOptions.IgnorePatternWhitespace | RegexOptions.Compiled
);
string replaced = regex.Replace("0034025876080795786104041811071 135 20150304111404 DFRANZ 61 9990020569910 DA ST6007 135 F", RegExReplacementString);
答案 0 :(得分:0)
我认为每个字段的固定长度信息对于解决这个问题很有用。
使用像"^(.{20})(.{10})(.{2})(.{2})(.{2})$"
这样的正则表达式来隔离每个字段。
这是一个例子,有5个你知道的字段
长度20,长度10,长度2,长度2,长度2。
然后使用一些LINQ和C#来获取(修剪过的)字段列表。
示例:
var testRegex = "^(.{20})(.{10})(.{2})(.{2})(.{2})$";
var testData = "Field of length 20 FieldLen10123456";
var fields = Regex.Match(testData, testRegex).Groups.Cast<Group>().Skip(1).Select(i => i.Value.Trim());