在管道分隔文件c#中查找字符

时间:2018-06-06 10:41:40

标签: c#

我有一个管道分隔文件,我需要用空格替换一个字符

例如:

MANGO |"APP | LE "| GRAPE

虽然APPLE是单个单词,但单词之间的额外管道符号会导致失败。

我需要一个c#代码来查找|"之后的管道符号,并将其替换为空格(“”)

3 个答案:

答案 0 :(得分:0)

试试正则表达式,

string input = " MANGO |\"APP | LE \"| GRAPE";

string result = Regex.Replace(input, @"[A-Za-z ]\|[A-Za-z ]", "");

Console.WriteLine(input);

Console.WriteLine(result);

编辑: 上面的正则表达式用于检查|带有前导和尾随空格。正则表达式

string result = Regex.Replace(input, "(\"\\S+\\s+)\\|(\\s+\\S+\\s+\")", "$1$2");

将搜索|在给定字符串的引号内

答案 1 :(得分:0)

如果我理解你的话

  

我需要一个c#代码来查找|"之后的管道符号   将其替换为空格""

表示您要删除引号|内的所有竖排符号" ... "(引号以"开头,以"结尾如果引号内有quoatation标记,则应加倍

我建议用两种状态来表示 FSM - 有限状态机:引用与否:

private static string PipeRemove(string value) {
  if (string.IsNullOrEmpty(value))
    return value;

  StringBuilder sb = new StringBuilder(value.Length);

  bool inQuot = false;

  foreach (char c in value) {
    if (c != '|' || !inQuot) // add any char except pipe within quotation
      sb.Append(c); 
    // else // uncomment this if you want space ' ' instead of pipeline '|'
    //   sb.Append(' ');

    if (c == '"')            // states changing
      inQuot = !inQuot;
  }

  return sb.ToString();
}

...

string test = "MANGO |\"APP | LE \"| GRAPE";

string result = PipeRemove(test);

Console.Write(result);

结果:

MANGO |"APP  LE "| GRAPE

请注意,即使已移除|,您也必须删除将APPLE字分成两个的空格

答案 2 :(得分:0)

你的情况可能比你看起来要复杂得多,但这里有一个适用于你的例子的正则表达式:

(\|"[^|]*?) \| (.*?"\|)

替换为$1$2

例如:

// input: MANGO |"APP | LE "| GRAPE |"hello  | world "|

string input = "MANGO |\"APP | LE \"| GRAPE |\"hello  | world \"|";
string result = Regex.Replace(input, @"(\|""[^|]*?) \| (.*?\""\|)", "$1$2");

// result: MANGO |"APPLE "| GRAPE |"hello world "|

Try it out online here