我有一个文本,我想提取一些数据,但有一个问题:有非常相似的部分,这可能会导致正则表达式混淆。
示例:
header
text
data: 10
body
header
text
data: 10
body
我正在简化,因为我无权显示实际文本
我想在data
之后提取数字,但我需要划定它位于标题和正文之间。为此,我正在使用正则表达式:
header[\s\S]*?data:\s(\d+)[\s\S]*?body
工作示例:https://regex101.com/r/tS9gU6/1
但是文本可能没有数据,所以它最终取下一个: https://regex101.com/r/hM7fV9/1
是否可以在不使用额外逻辑的情况下进行修复?我读了一些关于“展开循环”的内容
感谢。
答案 0 :(得分:0)
我害怕误解你的问题。
但是,我想这个正则表达式可以正常工作。
#number {
display: inline-block;
width: 25px;
}
#header {
display: inline-block;
}
.line {
margin-left: 30px;
}
.spacer {
padding-left: 15px;
}
我希望这篇文章可以帮到你。
答案 1 :(得分:0)
您需要的是tempered greedy token:
header(?:(?!header)[\s\S])*data:\s(\d+)[\s\S]*?body
非贪婪量词尽早停止匹配,但它们不会影响比赛何时开始。相反,您必须告诉它匹配除header
之外的任何内容。