如何使用 RegEx (C#) 在特定字符串之后匹配字符串
Posted
技术标签:
【中文标题】如何使用 RegEx (C#) 在特定字符串之后匹配字符串【英文标题】:How to match a string after a specific string using RegEx (C#) 【发布时间】:2018-07-24 12:03:34 【问题描述】:这是一个序列:
<h>blue</h>
<td>Water</td>
<h>red</h>
<td>Apple</td>
<h>yellow</h>
<td>Sun</td>
我想使用 RegEx 在字符串 red
之后查找第一次出现的 <td>
。
我试过(?<=red)(<td>)([\s\S]*?)(</td>)
,但我什么也没回。我不确定为什么。
我最接近的是(?<=red)([\s\S]*?)(</td>)
,但它添加了空格和标签。
我知道我可以使用索引和子字符串操作来做到这一点,但我宁愿使用 RegEx。
有没有办法做到这一点? 我正在专门寻找 C# 特定的解决方案。
string s = Regex.Match(s, @"(?<=red)([\s\S]*?)(</td>)");
【问题讨论】:
不要为此使用正则表达式。使用 XML 解析器,可能类似于 XPath。 你的正则表达式周围的 c# 代码是什么? @Isaac string s = Regex.Match(s, @"(?)"); cmets 中的代码不存在。相反,edit 您的问题并将其添加到那里。 假设您的“序列”实际上是 XML,并且您正在寻找任何包含“红色”的元素,并且您实际上正在寻找<td>
元素,而不仅仅是是否存在,您可以使用 @987654329 @。如果这些假设中的任何一个不正确,请澄清您的问题。
【参考方案1】:
如果你确实真的真的想使用 regex 来解决这个问题,请使用:
(?<=red</h>\s*<td>)([^<]*)
它使用(?<=…)
正向后视,并将匹配并捕获\s* 之后的字符串,直到它到达<
。
但是我真的真的很推荐使用 xml 解析器来做这种操作!!!
【讨论】:
非常感谢艾伦,这完全回答了我的问题!很难得到正则表达式的答案,但当我这样做时,它们是最好的!。 @Phil 你很幸运,这个“完全”回答了你的问题,因为它没有按照你的要求做。您要求“<td>
在字符串 red
之后的第一次出现”,并且此表达式在字符串 red</h>
之后的空格之后返回 <td>
。请注意,此表达式可能不适用于 XML,因为 XML 不需要用空格分隔。以后请准确描述您的问题。
@Dour High Arch。 Allan 很好地描述了这个问题并很好地回答了这个问题,他提供了适当的 RegEx 代码。你没有。我通过 10 000 行文本运行该模式,它是 100% 准确的。以上是关于如何使用 RegEx (C#) 在特定字符串之后匹配字符串的主要内容,如果未能解决你的问题,请参考以下文章
如何在 C# Regex 中使用lookbehind 来跳过重复前缀模式的匹配?
Regex-在给定数量的3个字母序列之后,如何匹配特定的3个字母序列?