所以,我想做的是:
我有一个字符串:
Special Skills:
someText
could range
through multiple lines
Special Abilities:
another
someText
Background:
multiline
text
我已经设法提出以下正则表达式。根据regexr.com,它可以完美地在JavaScript中工作,而根据Intellij内置的Check-Regex和freeformatter.com,它不能在Java中完美地工作。
Special Abilities:\n(.*\n)+?(Special Skills:|Background:)
表达式首先应提取
Special Skills:
someText
could range
through multiple lines
请注意,“特殊能力”和“背景”两个部分都是可选的。
由于我一直处于困境,因此不胜感激!
您可以在模式的末尾添加字符串结尾(行)$
作为替代组的替代,确保.
匹配回车带有(?d)
Pattern.UNIX_LINES
嵌入式标志,并(.*\n)+?
使用捕获组包装以将匹配的所有文本捕获为1组(并且(.*\n)+?
可以更改为非捕获组):
(?d)Special Abilities:\r?\n((?:.*\n)*?)(Special Skills:|Background:|$)
请参阅此正则表达式演示。
细节
(?d)
- .
现在匹配除换行符以外的任何字符Special Abilities:
-文字\r?\n
-CRLF或LF行尾((?:.*\n)*?)
-第1组:零个或多个,但尽可能少,重复0+个字符,除了LF符号,然后是LF符号(Special Skills:|Background:|$)
-三种选择之一:Special Skills:
,Background:
或字符串($
)的结尾。替代表达:
(?ms)Special Abilities:\r?\n(.*?)(^Special Skills:|^Background:|\Z)
观看此正则表达式演示
在这里,(?ms)
定义多行和点模式(^
将在此处.
匹配行的开始,并将匹配所有符号)。代替$
,我们需要使用\Z
-字符串锚的结尾。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句