2 回答
TA贡献1785条经验 获得超4个赞
您可以使用Regex.Split然后用您喜欢的任何标签包装结果数组/列表中的每个奇数元素:
var s = "All men like widgets but some men like widgets more than others";
var chunks = Regex.Split(s, @"(\s*\bwidgets\b\s*)");
var result = string.Concat(chunks.Select((i, index) => index % 2 == 0 ? $"<b>{i}</b>" : i));
Console.WriteLine(result);
// => <b>All men like</b> widgets <b>but some men like</b> widgets <b>more than others</b>
请参阅C# 演示。
该(\s*\bwidgets\b\s*)模式匹配并捕获到第 1 组 0+ 个空格、整个单词widgets和 0+ 个空格。这些匹配项保留在结果数组中,因为它们已被捕获。每个奇数元素都是一个不匹配的子串。
如果您不想用标签包装空白的不匹配项,请添加额外的!string.IsNullOrWhiteSpace(i)检查:
var chunks = Regex.Split(s, @"(\s*\bwidgets\b\s*)");
var result = string.Concat(
chunks.Select((i, index) =>
index % 2 == 0 && !string.IsNullOrWhiteSpace(i) ?
$"<b>{i}</b>" : i));
请参阅此 C# 演示。
TA贡献1757条经验 获得超7个赞
正如艾哈迈德建议你应该使用Regex.Spilt()
这是您的用例的示例
var op = Regex.Split("All men like widgets but some men like widgets more than others", @"widgets");
输出
//All men like
//but some men like
//more than others
更新
您可以使用以下代码
string op = GetTagsAroud("All men like widgets but some men like widgets more than others", @"widgets");
方法
static string GetTagsAroud(string input, string splitText)
{
var matches = Regex.Split(input, splitText);
StringBuilder output = new StringBuilder();
foreach (string match in matches)
{
output.Append("<b>");
output.Append(match.Trim());
output.Append("</b>");
}
return output.ToString();
}
- 2 回答
- 0 关注
- 74 浏览
添加回答
举报