在外部C#文件中搜索文本的代码

时间:2013-09-16 10:31:22

标签: c# regex string visual-studio-2010

我们的Designer.cs文件中有this.label1.Text = "Code Smart";

现在我正在阅读我的解决方案文件夹中保存的所有.Designer.cs个文件。

现在我想要符合这些条件:

  1. 如果字符串.Text=.Text =内匹配与否。
  2. 我想从"" (Double Quotes)中的字符串中获取文字,这意味着:Code Smart
  3. 背后的想法是收集文件中的所有.Text数据,因此,如果我得到匹配的数据和该文本的值,那么我会将其导出到CSV进行翻译。

    有人可以帮我这样做吗? PLS

    ADD1

    我在ADD1中做了一些更改并修改为ADD2,请检查并发表评论。感谢

    ADD2:

    好的,最后我达成了这个让我知道如何在双引号中输入字符串:

    FolderBrowserDialog fbd = new FolderBrowserDialog();
    
    foreach (string file in Directory.EnumerateFiles(fbd.SelectedPath, "*.Designer.cs"))
    {
        int counter = 0;
        string line;
    
        // Read the file and display it line by line.
        StreamReader CurrentFile = new StreamReader(file);
        while ((line = CurrentFile.ReadLine()) != null)
        {
            bool typeOne = line.Contains(".Text=");
            bool typeTwo = line.Contains(".Text =");
            if ((typeOne == true) || (typeTwo == true))
            {
                // Get the data which is enclosed in double quotes
            }
            counter++;
        }
        CurrentFile.Close();
    }
    

4 个答案:

答案 0 :(得分:1)

  

然后我会将其导出为CSV格式进行翻译。

如果目标是拥有多语言GUI,我建议不要这样做。 尝试使用Zeta Resource EditorResx Resource Translator

同时检查此资源:Walkthrough: Localizing Windows Forms。 它描述了如何创建可以使用Zeta或Resx编辑的多个语言资源文件。

希望这是你试图实现的目标。如果没有,请回答这个问题。

答案 1 :(得分:1)

假设没有双引号嵌套,您可以使用此正则表达式:

\.Text\s*=\s*"([^"]+)"

ideone demo

答案 2 :(得分:1)

看看这是否有帮助;

foreach (string file in Directory.EnumerateFiles(fbd.SelectedPath, "*.Designer.cs"))
{
    int counter = 0;
    string line;
    Regex r = new Regex(@"this.label1.Text[ ]*[\=]{1}[ ]*[\""]{1}(?<StringValue>[a-zA-Z0-9 ]*)[\""]{1}[ ]*[\;]{1}");
    // Read the file and display it line by line.
    StreamReader CurrentFile = new StreamReader(file);
    while ((line = CurrentFile.ReadLine()) != null)
    {
        bool typeOne = line.Contains(".Text=");
        bool typeTwo = line.Contains(".Text =");
        if ((typeOne == true) || (typeTwo == true))
        {
          Match m=r.Match(line);
          string thevalueyouneed=m.Groups[1].Value;//This is what you need.
          //Do other things with this value.  
        }
        counter++;
    }
    CurrentFile.Close();
}

第一组是您需要的字符串。

答案 3 :(得分:0)

    if ((typeOne == true) || (typeTwo == true))
    {
        int indexOfTheStartOfText = line.IndexOf(".Text", StringComparison.CurrentCulture);

        if (indexOfTheStartOfText != -1)
        {
            int textLength = (typeOne == true) ? ".Text=".Length : ".Text =".Length;
            int StartIndexOfActualText = indexOfTheStartOfText + textLength + "\"".Length;
            int EndIndexOfActualText = line.IndexOf('"', StartIndexOfActualText);

            string myText = line.Substring(StartIndexOfActualText, EndIndexOfActualText - StartIndexOfActualText);

        }
    }

StartIndexOfActualTexttypeOne需要更改typeTwo的计算