【发布时间】:2021-06-28 10:42:19
【问题描述】:
我收到了对此处提出的先前问题的非常有用的回复。
Use C# to surround phrases in a string with asterisk characters from a dictionary of phrases
我现在发布针对特定问题的后续问题。
我最初查询的基本前提是我有一组单词和短语,如下所示。
- 面粉
- 小麦粉
- 坚果
- 坚果
处理一串文本后,如下所示。
"Salt, Water, Wheat Flour, Palm Oil, Nuts, Tree Nuts"
我的目标是得到一个如下所示的字符串(即字典中的单词和短语用星号字符包围,最长的短语优先)。
"Salt, Water, *Wheat Flour*, Palm Oil, *Nuts*, Tree *Nuts*"
通过使用 Dmitry Bychenko 提供的以下正则表达式模式可以实现上述目标。
string pattern = @"\b(?<!\*)(?:" + string.Join("|", words
.Distinct()
.OrderByDescending(chunk => chunk.Length)
.Select(chunk => Regex.Escape(chunk))) + @")(?!\*)\b";
我有一个关于我正在处理的字符串何时已被处理的具体问题。
假设我有一个已经被处理过的字符串,如下所示。
"Salt, Water, *Wheat Flour*, Palm Oil, *Nuts*, Tree *Nuts*"
如果我想在上面的字符串中替换的单词数组现在包含一个更具体的短语,例如“Tree Nuts”,是否有一个正则表达式可以检测到以下短语应该被替换?
"Tree *Nuts*"
即这部分字符串应更新为以下内容。
"*Tree Nuts*"
【问题讨论】:
-
在重新处理字符串之前删除所有星号。