另一个多行组正则表达式查询
本文关键字:正则表达式 查询 另一个 | 更新日期: 2023-09-27 18:05:35
所以我试图写一个正则表达式来过滤特定片段的文本文件(寻找速度而不是蛮力)。
我想从每个匹配中得到三个东西:
- 一个键来标识代码段
- 一个可选的语言来格式化每个代码段
- 值,表示开始和结束标签之间的所有行
这是正则表达式(一个失败的测试工具可以在这里找到- https://gist.github.com/shiftkey/5236161):
(?s)code start (?<key>[A-Za-z-]*) (?<language>[A-Za-z]*).*['n](?<value>.*?)['n].*end code (?<key>[A-Za-z-]*)
使用这些选项:RegexOptions.Compiled | RegexOptions.ExplicitCapture | RegexOptions.Multiline
.
所以像这样的文件:
// code start foo csharp
var x = 1;
// end code foo
给出期望值:
- <
- 键/strong>: foo 语言>:csharp
- value:
var x = 1;
但是当我引入带有第二行的代码片段时,我只得到最后一行:
// code start foo csharp
var x = 1;
var y = 2;
// end code foo
- <
- 键/strong>: foo 语言>:csharp
- value:
var y = 2;
代替
- :
var x = 1;'r'nvar y = 2;
(或相似的)
让组覆盖多行,我错过了什么?
我看过在SO上提出的类似场景,但它们对我的使用不起作用。
这可以通过改变两个.*
s的贪婪度来解决:
(?s)code start (?<key>[A-Za-z-]*) (?<language>[A-Za-z]*).*?['n](?<value>.*)['n].*?end code (?<key>[A-Za-z-]*)
读取语言后的.*
必须不那么贪婪,因为我们需要第一个新行之后的内容作为片段值。然而,解析value
的.*
可能更贪婪,因为它不应该在遇到第一个'n
时停止,因此出现了上面的模式。
如果你愿意,你也可以用一些look - around的东西来做catch…
(?<=code'sstart's)(?<key>'b'w+'b)'s(?<language>'b'w+'b).*'r'n(?<content>(?s).*)(?='r'n.*end'scode's'1's-->)
相关文章:
- 获取以@开头的单词,例如正则表达式和javascript提到的Facebook
- 在正则表达式中写入 ( 和 ) 不起作用
- 正则表达式匹配但不包含
- 包含和正则表达式返回 true,但不完全匹配
- 正则表达式将多个组替换为通配符
- 用于验证媒体文件的正则表达式
- 正则表达式,用于使用 c# 修复 solr 查询中的“and”和“or”
- 类似谷歌的搜索查询拆分正则表达式
- 当我的请求URL有一个查询字符串时,我如何编写一个正则表达式来用Grapevine路由流量
- 使用正则表达式修改查询
- 字符串函数(正则表达式?)用于从 url 字符串中删除查询字符串对
- 在这个Linq查询中使用正则表达式
- 我需要一个正则表达式,它可以从HTML内容字符串返回给我的相对URL +查询字符串
- MongoDB在正则表达式查询中使用索引
- 使用正则表达式从SQL查询中提取表和列
- 用于URL查询字符串的c#正则表达式
- 可查询的order /GroupBy正则表达式
- 用于删除/替换查询字符串RSS提要内容块的正则表达式
- 正则表达式,用于获取Url而不需要查询字符串
- 另一个多行组正则表达式查询