C# (.net) RegEx.Match 换行符之间的子字符串 - 使用换行符作为正向超前限制
Posted
技术标签:
【中文标题】C# (.net) RegEx.Match 换行符之间的子字符串 - 使用换行符作为正向超前限制【英文标题】:C# (.net) RegEx.Match Substring between newlines - using newline as positive lookahead limit 【发布时间】:2018-07-14 21:03:03 【问题描述】:我一直在修改 RegEx 并取得了一些不错的结果,我想继续使用它。
现在我一直在寻找一个设置在 2 个换行符之间的字符串。这是示例目标文本(注意这是数千种可能的文本之一):
Substance information in Wikipedia
FORMULA
CH2O
Grafik
Molar mass: 30,03 g/mol
目标是“CH2O”。
我尝试了(?<=FORMULA).*(?=Grafik)
和RegexOptions.Singleline
,它在FORMULA
之后开始,但一直向下并忽略Grafik
。
我在没有单行的情况下尝试过,但由于.
在\n
处停止,它没有返回任何内容。由于我希望换行符作为限制,因此以下没有单行。
我得到的最接近的是这些:
(?<=FORMULA)[\w\W]+(?=Grafik)
(?<=FORMULA)[\w\W]*(?=Grafik)
但是,如果 Grafik
更改,我想跟踪换行符而不是它。
(?<=FORMULA)[\w\W]*(?=\n)
或 (?<=FORMULA)[\w\W]*(?=\r)
仍将匹配 Grafik
出于某种原因...
有没有人知道一种更优化的方法来使正向前瞻成为换行符?
请不要回答任何与 RegEx 无关的内容。
【问题讨论】:
所以为了清楚起见,您想在公式之后和新行之前做很多事情吗? 是的,在其他情况下,CH2O 可能会有所不同,所以我需要一个简并通配符读取。 【参考方案1】:这对你有用吗
(?<=FORMULA\s+)\S+
匹配FORMULA
之后和新行之前的所有内容
【讨论】:
天哪,太明显了! 非常感谢!你是冠军! @PhilZan 没有问题 为了将FORMULA
之后的EOL保持在捕获组之外,我认为应该是(?<=FORMULA\s+)\S+
以上是关于C# (.net) RegEx.Match 换行符之间的子字符串 - 使用换行符作为正向超前限制的主要内容,如果未能解决你的问题,请参考以下文章
与 C# 控制台应用程序中的相同代码相比,Regex.Match 在 Unity 中返回不同/错误的结果
.net正则表达式大全(.net 的 System.Text.RegularExpressions.Regex.Match()方法使用)