我正在尝试在模式字<Art><dot><digits><dot>
代码:
Art. 83.
xxx xxx xxx
Art. 3.
xxx xxx xxx
到目前为止,我尝试过这种模式,但是如果为+
选择添加\d
失败了..为什么?
(小于?=艺术.. \ d \ d)。
如何在具有随机数字长度的文本之后选择文本?
好的我需要为文本模式Art. <digits length unknown>.
输入
Art. 3.
xxx xxx xxx
输出
Art. 3.
xxx xxx xxx
我正在寻找JAVA
Android
/ Notepad++
/解析器的解决方案
答案 0 :(得分:3)
你正在使用外观,而不是前瞻,这在大多数实现中都有局限性。来自http://www.regular-expressions.info/lookaround.html
坏消息是大多数正则表达式都不允许你在lookbehind中使用任何正则表达式,因为它们不能向后应用正则表达式。正则表达式引擎需要能够在检查lookbehind之前找出要退回的字符数。在评估lookbehind时,正则表达式引擎确定lookbehind内的正则表达式的长度,后退主题字符串中的许多字符,然后从左到右应用正则表达式中的正则表达式,就像使用普通正则表达式一样。 / p>
在您的情况下,也许您可以使用与文本匹配的表达式并使用替换中的匹配项。例如,在Java中:
String original = "Art. 3.\nxxx xxx xxx";
String replaced = original.replaceAll("Art\\. \\d+\\.", "$0\n");
答案 1 :(得分:1)
在大多数regex实现中,您无法使用可变长度外观。但是,您应该能够在不看后面的情况下解决这个问题:
# Match your string in a group
/(Art\.\s\d+\.)/g
# Replace and append a new line to $1 match group
$1\n
示例:http://regex101.com/r/fW5jO7
我们不知道您使用的语言,但PHP实现:
preg_replace('/(Art\.\s\d+\.)/', "$1\n", $text);
答案 2 :(得分:0)
在perl:
for (<DATA>) {
print;
print("\n") if (/Art\. \d+\./);
}
__DATA__
whatver
stuff
Art. 83.
123 456 789
Art. 3.
987 654 321
more
stuff
答案 3 :(得分:0)
使用分组而不是lookbehind
(Art..\d\d.)(.)
然后获得第2组
答案 4 :(得分:0)
Notepad ++解决方案:
找到:^(Art\.\s*\d+\.)
替换为:$1\n
可能你想要crlf,所以使用:替换为:$1\r\n