C# 替换字符串c中第一组引号中的内容#

C# 替换字符串c中第一组引号中的内容#,c#,regex,C#,Regex,我正在从事一个项目,该项目涉及必须根据某些用户生成的参数操作bat文件。bat文件本身是以静态格式手动创建的。bat文件的一个基本示例是: cd \some\predefined\bat start run_some_script "user_generated_argument" [other pre-defined arguments] bat文件的“user_generated_argument”位在C#中由以下代码操作: string bat_text = File.ReadAllTe

我正在从事一个项目,该项目涉及必须根据某些用户生成的参数操作bat文件。bat文件本身是以静态格式手动创建的。bat文件的一个基本示例是:

cd \some\predefined\bat
start run_some_script "user_generated_argument" [other pre-defined arguments]
bat文件的
“user_generated_argument”
位在C#中由以下代码操作:

string bat_text = File.ReadAllText(bat_path);
Regex regex = new Regex("(.*?)\".*\"(.*)");
string new_argument = "A new argument";
string new_bat = regex.Replace(bat_text , "$1\"" + new_argument + "\"$2", 1);
这将产生以下结果:

cd \some\predefined\bat
start run_some_script "A new argument" [other pre-defined arguments]
cd \some\predefined\bat
start run_some_script "A new argument" [other pre-defined arguments]
这是预期的输出

然而,问题在于,当第一个引用的参数之后的另一个预定义参数也在引用中时,第二个引用的参数似乎消失了。例如,如果bat文件看起来像:

cd \some\predefined\bat
start run_some_script "user_generated_argument" "a_predefined_quoted_argument" [other pre-defined arguments]
从上面运行相同的C#代码将产生以下结果:

cd \some\predefined\bat
start run_some_script "A new argument" [other pre-defined arguments]
cd \some\predefined\bat
start run_some_script "A new argument" [other pre-defined arguments]
“预定义的引用参数”
将不再在字符串中


我可能完全错了。如何使预定义的带引号的参数不消失?

您也可以使用
File.ReadAllLines()
读取行,将所需行拆分为
string.split()
,并以这种方式替换它们

比如:

string[] lines = File.ReadAllLines(fileName);
string commandLine = lines.Where(d => d.StartsWith("start")).Single();
string[] arguments = commandLine.Split(' ');

foreach (var argument in arguments)
{
    if (argument.StartsWith("\""))
    {
        // do your stuff and reassemble
    }
}

问题是你的表情 \".*\" 渴望或贪婪,从找到的第一个报价到最后一个报价之间拿走所有东西。要使它懒惰或不情愿,放一个?之后* 像这样(我使用VB,它通过双引号转义双引号)

现在它将包含第一个报价和下一个报价之间的所有内容