我有一个字符串,它的开头和结尾都有空格。例如:
<para> This is a test paragraph </para>
现在我有一个正则表达式"(<\\w+[^<>\\/]*> | <\\/\\w+>)"
,可以找到>
和<
之间的任何起始和结尾空格。
因此,如果我在开头,结尾或两者之间都找到空格,我想对其进行修剪。
我该怎么做?
我想到了:
string mainstring = "<para> This is a test paragraph </para>";
string regex1 = "(<\\w+[^<>\\/]*> | <\\/\\w+>)";
string regex2 = "(<\\w+[^<>\\/]*>|<\\/\\w+>)";
mainstring = Regex.replace(mainstring, regex1, regex2);
但是这行不通。
此外,我的字符串包含多行。
string mainstring = "<para> This is a test paragraph </para>";
string regex1 = "(<\\w+[^<>\\/]*> | <\\/\\w+>)";
mainstring = Regex.replace(mainstring, regex1, "");
但这会删除所有找到的值,并将其替换为""
。
主要输入:"<para> This is a test paragraph </para>"
预期的输出: "<para>This is a test paragraph</para>"
答案 0 :(得分:2)
我认为最简单的方法是在标记之间提取文本,然后对该文本使用Trim()
方法:
var mainstring = "<para> This is a test paragraph </para>";
// First index of >
var start = mainstring.IndexOf(">") + 1;
var prefix = mainstring.Substring(0, start);
// Last index of <
var end = mainstring.LastIndexOf("<") - 1;
var suffix = mainstring.Substring(end + 1);
mainstring = prefix + mainstring.Substring(start, end - start + 1).Trim() + suffix;
无需使用正则表达式
答案 1 :(得分:1)
您可以使用此正则表达式捕获标签和内部文本,而忽略标签前后的空格,
(<(\w+)>)\s*(.*?)\s*(<\/\2>)
并用\1\3\4
替换所有内容,这将消除不必要的空间并保留其余空间。
在\w
对您来说不够用的情况下,您可以加宽标签的字符集,并可以使用[\w.-]
之类的东西。
检查这些C# codes for demo,
string pattern = @"(<(\w+)>)\s*(.*?)\s*(</\2>)";
string substitution = "$1$3$4";
string input = "<para> This is a test paragraph </para>";
Console.WriteLine("Before: " + input);
Regex regex = new Regex(pattern);
string result = regex.Replace(input, substitution);
Console.WriteLine("After: " + result);
打印
Before: <para> This is a test paragraph </para>
After: <para>This is a test paragraph</para>
答案 2 :(得分:1)
在要保留的零件上使用capturing groups(以替换图案替换为backreferences),然后\s+
删除空白:
string mainstring = "<para> This is a test paragraph </para>";
string regex1 = @"(<\w+[^<>/]*>)\s+|\s+(</\w+>)";
mainstring = Regex.Replace(mainstring, regex1, "$1$2");
Console.WriteLine(mainstring);
请参见C# demo。
详细信息
(<\w+[^<>/]*>)\s+
-第1组($1
):<
,1个以上的字符字符,<
,>
,{{ 1}}(注意,您不必在.NET正则表达式中转义/
),然后转义/
,然后转义该组之外的1+个空格>
-或|
-超过1个空格\s+
-第2组((</\w+>)
):$2
,1个以上的字符字符和一个</
。这里是.NET regex demo: