1

我想在字符串中找到特定的子字符串模式。在某种程度上我可以得到但不完全是我想要提取的内容。

我正在开发一个控制台应用程序。下面我提到了代码

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Text.RegularExpressions;
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string item = @"wewe=23213123i18n("""", test. ),cstr(12),i18n("""",test3)hdsghwgdhwsgd)"; 
            item = @"MsgBox(I18N(CStr(539)," + "Cannot migrate to the same panel type.)" +", MsgBoxStyle.Exclamation, DOWNLOAD_CAPTION)";
            string reg1 = @"i18n(.*),(.*)\)";
            string strVal = Regex.Match(item, reg1, RegexOptions.IgnorePatternWhitespace | RegexOptions.IgnoreCase).Groups[0].Value;
            List<string> str = new List<string> ();
            str.Add(strVal);
            System.IO.File.WriteAllLines(@"C:\Users\E543925.PACRIM1\Desktop\Tools\Test.txt", str);
        }
    }
}


Expected output -  I18N(CStr(539)," + "Cannot migrate to the same panel type.)
Actual output -  I18N(CStr(539),Cannot migrate to the samepaneltype.),MsgBoxStyle.Exclamation, DOWNLOAD_CAPTION)

我必须对正则表达式进行一些更改。我试过了,但没能成功。我是 regex 和 c# 的新手。请帮忙 。提前致谢 ..

4

2 回答 2

1

你想让.*懒惰(即匹配尽可能少的字符).*?
(或者也许让你的正则表达式变成类似的东西"i18n\([^,)]*,[^)]*\)")。

如果您想要多个匹配项,那么您可能应该有一个 while 循环。

这个:

string item = @"wewe=23213123i18n("""", test. ),cstr(12),i18n("""",test3)hdsghwgdhwsgd)"; 
item = @"MsgBox(I18N(CStr(539)," + "Cannot migrate to the same panel type.)" +", MsgBoxStyle.Exclamation, DOWNLOAD_CAPTION)";
string reg1 = @"i18n(.*?),(.*?)\)";
Match match = Regex.Match(item, reg1, RegexOptions.IgnorePatternWhitespace | RegexOptions.IgnoreCase);
while (match.Success)
{
    string strVal = match.Groups[0].Value;
    Console.WriteLine(strVal);
    match = match.NextMatch();
}

印刷:

I18N(CStr(539),Cannot migrate to the same panel type.)

现场演示

于 2013-11-14T08:57:49.943 回答
0

你可以试试这个正则表达式:

i18n(\([^\)]*\))

这意味着:匹配 i18n 并捕获以 open 开头的组(,后跟除了 closed 的任何字符)然后有一个 closed )

于 2013-11-14T08:50:18.787 回答