格式字符串:解析

时间:2011-06-08 18:17:11

标签: c# .net parsing

我有一个解析问题。我有一个段落,其中包含:  word  个实例。所以基本上它有一个冒号,两个空格,一个单词(可以是任何东西),然后是两个空格。

所以,当我有这些实例时,我想转换字符串,所以我有

  1. :之后的新行字符和单词。
  2. 删除了单词后面的双重空格。
  3. 用新的换行符替换所有双倍空格。
  4. 不知道到底该怎么做。我正在使用C#来做到这一点。上面的要点2是我很难做到的。

    谢谢

5 个答案:

答案 0 :(得分:3)

假设您的原始字符串完全符合您所描述的格式,则可以:

var newString = myString.Trim().Replace("  ", "\n");

Trim()删除前导和尾随空格,处理字符串末尾的空格。

然后,Replace替换剩余的" "两个空格字符,并添加"\n"个换行符。

结果已分配给newString变量。这是必需的,因为myString不会改变 - 因为.NET中的字符串是immutable

我建议您阅读String类及其所有方法和属性。

答案 1 :(得分:2)

使用RegularExpressions可以为您提供所需内容的完全匹配。

正则表达式匹配冒号,两个空格,一个单词,然后两个空格是:

Dim reg as New Regex(":    [a-zA-Z]*    ")

[a-zA-Z]将查找字母范围内的任何字符。如果您接受单词中的数字,也可以附加0-9。之后的*表示可以有前面值的0个或更多个实例。

[a-zA-Z]*将尝试对任何一组连续的字母字符进行完全匹配。

进一步阅读后,如果您正在寻找,可以使用[\w]代替[a-zA-Z0-9]。这将匹配任何“单词”字符。

来源:http://msdn.microsoft.com/en-us/library/ms972966.aspx

您可以使用reg.Matches(inputString)检索所有匹配项。

有关正则表达式替换的更多信息以及您的选项,请查看http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.regex.replace.aspx

编辑:在我使用\s搜索空格之前。这将匹配任何空格字符,包括制表符,新行和其他。这不是我们想要的,所以我将它还原为搜索确切的空格字符。

答案 2 :(得分:2)

你可以尝试

var str = ":  first  :  second  ";
var result = Regex.Replace(str, ":\\s{2}(?<word>[a-zA-Z0-9]+)\\s{2}",
                                                         ":\n${word}\n");

答案 3 :(得分:1)

您可以使用string.TrimEnd - http://msdn.microsoft.com/en-us/library/system.string.trimend.aspx - 修剪字符串末尾的空格。

答案 4 :(得分:1)

以下是使用正则表达式的示例。有关详细信息,另请参阅this question

模式字符串基本上告诉正则表达式查找冒号后跟两个空格。然后我们保存在一个名为“word”的捕获组中,无论该字被两侧的两个空格包围。最后指定了两个空格来完成模式。

替换使用一个lambda,它表示每次匹配,用冒号,换行符,“孤独”一词和另一个换行符替换它。

string Paragraph = "Jackdaws love my big sphinx of quartz:  fizz  The quick onyx goblin jumps over the lazy dwarf. Where:  buzz  The crazy dogs.";
string Pattern = @":  (?<word>\S*)  ";
string Result = Regex.Replace(Paragraph, Pattern, m =>
    {
        var LoneWord = m.Groups[1].Value;
         return @":" + Environment.NewLine + LoneWord + Environment.NewLine;
    },
    RegexOptions.IgnoreCase);

<强>输入

Jackdaws love my big sphinx of quartz:  fizz  The quick onyx goblin jumps over the lazy dwarf. Where:  buzz  The crazy dogs.

<强>输出

Jackdaws love my big sphinx of quartz:
fizz
The quick onyx goblin jumps over the lazy dwarf. Where:
buzz
The quick brown fox.

注意,对于列表中的第3项,如果您还想用换行符替换两个空格的单个实例,则可以执行以下操作:

Result = Result.Replace("  ", Environment.NewLine);