C# 正则表达式忽略第一个和最后一个终止符

C# 正则表达式忽略第一个和最后一个终止符,c#,regex,C#,Regex,文本中的字符串使用了|作为分隔符 @"^\||\|$" 例如: |2P|1|U|F8| 我希望结果是2P | 1 | U | F8。我该怎么做 ^\||\|$ 您可以尝试此操作。替换为空字符串。使用逐字记录模式。请参阅演示 只需删除起始分隔符和结束分隔符即可 @"^\||\|$" 使用下面的正则表达式,然后用空字符串替换匹配项 Regex rgx = new Regex(@"^\||\|$"); string result = rgx.Replace(input, ""); 处理多行时

文本中的字符串使用了
|
作为分隔符

@"^\||\|$"
例如:

|2P|1|U|F8|
我希望结果是
2P | 1 | U | F8
。我该怎么做

^\||\|$
您可以尝试此操作。替换为
空字符串
。使用逐字记录模式。请参阅演示


只需删除起始分隔符和结束分隔符即可

@"^\||\|$"
使用下面的正则表达式,然后用空字符串替换匹配项

Regex rgx = new Regex(@"^\||\|$");
string result = rgx.Replace(input, "");
处理多行时,请使用多行修饰符
m

Regex rgx = new Regex(@"(?m)^\||\|$");
由于
|
是正则表达式中的一个特殊字符,因此需要对其进行转义以匹配文本
|
符号

string input = "|2P|1|U|F8|";

foreach (string item in input.Split("|".ToCharArray(), StringSplitOptions.RemoveEmptyEntries))
{
    Console.WriteLine(item);
}
结果是:

2P
1
U
F8

正则表达式非常简单,但是为什么不直接使用
Trim()

或者没有新的[]{…}:

str = str.Trim('|');
输出:

如果存在前导/尾随空格,可以使用链接修剪:

var str = "\r\n |2P|1|U|F8|   \r\n";
str = str.Trim().Trim('|');

输出将是相同的。

为了完成起见,您也可以使用
Mid

Strings.Mid("|2P|1|U|F8|", 2, s.Length - 2)

这将从第二个字符到前一个字符再到最后一个字符的部分切掉,并生成正确的输出。

您可以使用
字符串。子字符串

string str = "|2P|1|U|F8|"; 
string newStr = str.Substring(1, str.Length - 2);

我假设在某个时候,您会希望解析字符串以提取其“
|
”分离的组件,因此这里有另一个朝这个方向的替代方法:

string.Join("|", theString.Split(new[] {'|'}, StringSplitOptions.RemoveEmptyEntries))

你不需要正则表达式来实现这一点,它不是一个逐字模式。它是一个。您只需编写
.Trim(“|”)
。如果第一个或最后一个值可能是空的:
|| 1 | U | F8 |
,这将不起作用,但这可能不是问题。@Kobi:Old habits:)并且我更新了代码以返回预期的结果,即使使用前导/尾随空格。