期望行为
| 输入|输出|
| - -----|- -----|
| Loren, here is some #IN#-line #TEXT# ipsum.
| (IN)(TEXT)
|
尝试失败
(?:?<!^)(?:^\s*)(#\s*[^\n\r]+\s*#+)(?:?<!$)
(?:?<!^)
...除行首以外的任何内容的非捕获组(
...开始组?:
...表示该小组不应捕获任何内容?<!
...消极的向后看^
...字符串的开头或类似换行符的字符串\n\r?|\r?\n
)
...组结束。(?:^\s*)
不捕获行的开头或零个或多个白色字符(#\s*[^\n\r]+\s*#+)
(
开始捕获组#
恰好一个磅符号、数字符号或哈希标签\s*
\s
white-space,like tabs,and carriage returns,et cetra...*
零或更多。(0,+∞)[^\n\r]+
...除换行符或回车符以外的任何内容\s*
...零个或多个空格,其中空格为\s
#+
...#
中的一个或多个)
...组结束。(?:?<!$)
非捕获组,用于除行首以外的任何内容(
...开始组?:
...表示该组应是非捕获组。?<!
...消极的向后看$
...字符串结尾或类似换行符的字符串\n\r?|\r?\n
)
...组结束
1条答案
按热度按时间kokeuurv1#
您可以首先匹配您想要“不碍事”的内容,然后对您想要保留的内容使用带有捕获组的交替:
图案吻合
^
字符串的开头[^\S\r\n]*#
匹配不带换行符的可选空格字符,后跟#
|
或#
按字面匹配([^\r\n#]+)
捕获组1,匹配1+除换行符或#
以外的字符#
按字面匹配(?![^\S\r\n]*$)
负先行,在字符串末尾的右侧Assert非空白字符Regex demo
请注意,如果匹配从#到下一个#,则只匹配此字符串
#TEXT1#TEXT2#
中的TEXT1如果支持lookbehindAssert中的无限量词:
Regex demo