gpt4 book ai didi

c# - 匹配文本模板中的多个字符串

转载 作者:行者123 更新时间:2023-11-30 16:41:12 25 4
gpt4 key购买 nike

对于经验丰富的 Regex 专家来说,这可能是一个微不足道的问题,但在搜索了几个小时之后,我不得不承认我似乎不知道正确的搜索词。

我依稀记得在某些搜索/替换目标正则表达式引擎(文本编辑器)中,可以为子模式匹配定义变量,以便在替换字符串中重新排列它们。类似(伪代码)

string input = "name: john, profession: lumberjack";
string pattern = @"[a-z]*: %1=([a-z]*), [a-z]*: %2=([a-z]*)";
string replacement = @"customer %1 is a %2";
string result = Regex.Replace(input ,pattern ,replacement);

结果应假设“客户约翰是一名伐木 worker ”。我不知道这在 C# 中是否可行,但我更愿意做的是获取数组中返回的子模式匹配,例如(再次伪代码)

string[] subMatches = Regex.MultiMatch(input ,pattern);

其中 subMatches[0]=="john"subMatches[1]=="lumberjack"

我知道我可以使用 lookaround assertions 在逐场比赛的基础上做到这一点并在循环中构造数组并检查所有子模式是否匹配。

但是是否还有一个单行表达式(如上面的第二个代码块)来表达我想要的内容?

最佳答案

您可以使用带有捕获组的简单正则表达式和带有替换反向引用(占位符)的 Regex.Replace 来插入子匹配:

var result = Regex.Replace(s, @"[a-z]+:\s*([a-z]+),\s*[a-z]+:\s*([a-z]+)", "customer $1 is a $2");
// => customer john is a lumberjack

参见 regex demo

图案细节

  • [a-z]+ - 1+ 个小写 ASCII 字母(要匹配任何字母,请使用 \p{L} 并使用任何“单词”字符,请使用 \w 而不是 [a-z])
  • :\s* - 一个冒号后跟 0+ 个空白字符
  • ([a-z]+) - 第 1 组(引用使用替换模式中的 $1):1+ 个 ASCII 小写字母(参见上面的注释)
  • ,\s* - 一个逗号和 0+ 个空白字符
  • [a-z]+:\s* - 1+ 个 ASCII 小写字母,: 和 0+ 个空白字符
  • ([a-z]+) - 第 2 组(引用使用替换模式中的 $2):1+ 个 ASCII 小写字母(参见上面的注释)

关于c# - 匹配文本模板中的多个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49789834/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com