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:)并且我更新了代码以返回预期的结果,即使使用前导/尾随空格。