用引号隔离单词(C#)

时间:2014-02-10 12:23:16

标签: c# regex

帮帮我。我花了很多时间,但都无济于事。 有必要隔离一个三个单词的字符串,最后一个单词应该用引号括起来,里面不应该有空格。  例如,来自string:

  

文字设置vrouter“Untrust-Gi”某些文字

我需要(在С#中)

  

设置vrouter“Untrust-Gi”

请查看代码。如果可能,请更正代码。我把它添加到我的问题

using System.Text.RegularExpressions;
namespace WindowsFormsApplication2
{
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        OpenFileDialog opendialog = new OpenFileDialog();
        if (opendialog.ShowDialog() == DialogResult.OK)
        {
            StreamReader sr = new StreamReader(opendialog.FileName);
            string pattern = @"(\w+\s){2}(""\S+?"")";
            while (sr.EndOfStream == false)
            {
                var match=Regex.Matches(sr, pattern);

                textBox1.AppendText(match.ReadLine()+'\n');


            }

        }
    }


}

}

2 个答案:

答案 0 :(得分:2)

如果您知道引号内的表达式始终以“set vrouter”开头,则可以使用此正则表达式

set vrouter \"(.*)\"

然后提取捕获组(.*)

中获得的序列

使用以下工具测试您的表达式

http://regexpal.com/

http://www.regexper.com/

获得提取的表达式后,您可以非常轻松地在C#中重新构建字符串。

var value = String.Format("set vrouter \"{0}\"", extractedExpression);

答案 1 :(得分:1)

var match = Regex.Match(yourStringHere, @"(\w+\s){2}(""\S+?"")");
if(match.Success)
    result = match.Value;

\ S表示“不是空格”,因此它回答了“内部应该没有空格”的要求。

编辑:这是你修改后的代码,你没有指定文件大小,所以也许有更好的方法来阅读它...

OpenFileDialog opendialog = new OpenFileDialog();
    if (opendialog.ShowDialog() == DialogResult.OK)
    {
        var lines = File.ReadLines(opendialog.FileName);
        string pattern = @"(\w+\s){2}(""\S+?"")";
        foreach(var line in lines)
        {
            var matches= Regex.Matches(line, pattern);
            foreach(Match match in matches)
            {
                if(match.Success)
                textBox1.AppendText(match.Value+'\n');
            }
        }
    }