我有一个管道分隔文件,我需要用空格替换一个字符
例如:
MANGO |"APP | LE "| GRAPE
虽然APPLE是单个单词,但单词之间的额外管道符号会导致失败。
我需要一个c#代码来查找|"
之后的管道符号,并将其替换为空格(“”)
答案 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 "|