gpt4 book ai didi

c# - 如果关键字之前存在数字,则删除子字符串

转载 作者:太空宇宙 更新时间:2023-11-03 19:02:55 25 4
gpt4 key购买 nike

我有一个字符串的形式:

5 dogs = 1 medium size house
4 cats = 2 small houses
one bird = 1 bird cage

我想做的是删除等号之前存在的子字符串,但前提是该子字符串包含关键字并且该关键字之前的数据是整数。

所以在这个例子中我的关键词是:

dogs,
cats,
bird

在上面的例子中,我的过程的理想输出是:

1 间中等大小的房子

2间小房子

一只鸟=1个鸟笼

到目前为止我的代码看起来像这样(我现在正在对关键字值/字符串进行硬编码)

var orginalstring= "5 dogs = 1 medium size house";
int equalsindex = originalstring.indexof('=');
var prefix = originalstring.Substring(0,equalsindex);
if(prefix.Contains("dogs")
{
var modifiedstring = originalstring.Remove(prefix).Replace("=", string.empty);
return modifiedstring;
}
return originalstring;

这里的问题是,无论关键字前面的数据是否为数字,我都将删除整个子字符串。

有人能帮我解决这个额外的逻辑吗?

一如既往地感谢所有花几分钟阅读此问题的人。

米克

最佳答案

你可以用一个简单的正则表达式来完成

\d+\s+(?:kw1|kw2|kw3|...)\s*=\s*

其中 kwX 是相应的关键字。

var data = new[] {
"5 dogs = 1 medium size house",
"4 cats = 2 small houses",
"one bird = 1 bird cage"
};
var keywords = new[] {"dogs", "cats", "bird"};
var regexStr = string.Format( @"\d+\s+(?:{0})\s*=\s*", string.Join("|", keywords));
var regex = new Regex(regexStr);
foreach (var s in data) {
Console.WriteLine("'{0}'", regex.Replace(s, string.Empty));
}

在上面的示例中,string.Format 的调用将由 | 连接的关键字列表粘贴到帖子顶部表达式的"template"中,即

\d+\s+(?:dogs|cats|bird)\s*=\s*

这个表达式匹配

  • 一个或多个数字\d+,后跟
  • 一个或多个空格\s+,后面是
  • 列表中的关键字:dogs, cats, bird (?:dogs|cats|bird),后跟
  • 零个或多个空格\s*,后跟
  • 一个等号=,后面是
  • 零个或多个空格\s*

剩下的很简单:因为这个正则表达式匹配您希望删除的部分,您需要调用 Replace 并传递给它 string.Empty

Demo.

关于c# - 如果关键字之前存在数字,则删除子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32976304/

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