我有一些文字:
Value1
sub values1
sub values1
Value2
sub value2
sub value2
Value3
...and so on
我想使用RegEx来检索Value1和第一个空行之间的所有内容
还有一个额外的复杂因素Value1
可能会附加.addition
,因此我也需要将其包括在内。
所以我可能正在看
Value1
sub values1
sub values1
Value1.addition
sub value2
sub value2
我希望匹配其中一个,在我的示例中只是Value1
我正在寻找的输出是
sub values1
sub values1
答案 0 :(得分:0)
这似乎适用于.NET:
"(?<=(\A|\n)Value1.*\n).*(\n.*)*?(?=\n\s*\n|\Z)"
答案 1 :(得分:0)
仅通过使用正则表达式就无法选择Value 1
而不是Value 1.addition
,但是您可以使用您使用的任何语言的简单if语句轻松地完成此操作。以下正则表达式应该适合您。
/^(Value(\d+))(.*)$((?:\r?\n^.+$)*)\r?\n^$/gm
如果应用于您的第一个示例字符串,结果将为:
group #1: Value1
group #2: 1
group #3:
group #4: sub values1
sub values1
group #1: Value2
group #2: 2
group #3:
group #4: sub value2
sub value2
将此应用于第二个示例字符串会产生以下结果:
group #1: Value1
group #2: 1
group #3:
group #4: sub values1
sub values1
group #1: Value1
group #2: 1
group #3: .addition
group #4: sub value2
sub value2
现在你可以简单地比较第2组,检查第3组是否有值并采取相应行动。
答案 2 :(得分:0)
在Python中:
import re
txt = '''
Value1
sub values1
sub values1
Value1.addition
sub value12
sub value12
Value2
sub value2
sub value2'''
match1 = re.search('Value1\n([\s\S]*?)\n\n', txt)
match1_addition = re.search('Value1\.addition\n([\s\S]*?)\n\n', txt)
values1 = match1.groups()[0] + '\n' + match1_addition.groups()[0]
print(values1)
返回
sub values1
sub values1
sub value12
sub value12
正则表达式解释:
Value1\n
:查找以Value1
开头,后跟新行(...)
:匹配组,这是我们想要的内容
[...]*?
:懒惰匹配,即尽可能少的字符[\s\S]
:任何空格字符(空格,制表符,换行符) - \s
- 或非空格字符 - \S
\n\n
:两个换行符,表示空行