如何修剪正则表达式替换字符串中的空格

时间:2015-03-31 14:50:36

标签: c# regex c#-4.0

我有一个正则表达式匹配字符串;

    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);

1 个答案:

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