用空格替换特定分隔符之间除文本之外的所有内容
Replace everything except text between specific delimiters with whitespaces
我有以下文本文件(文件最多可能包含几百行):
<% some important text %> something <% important stuff %>
not important stuff <not important stuff>
<% some
important text
%>
基本上我需要用空格替换“<% %>”分隔符之间的任何内容。一行中可能多次出现 <% text %>。此外,<% %> 块可能分布在多行中,如上例所示。
结果应如下所示:
<% some important text %> <% important stuff %>
<% some
important text
%>
有什么处理方法的建议吗?尝试过正则表达式,很容易得到 <% text %> 但这还不够,我需要在模式不匹配的地方放置空格。
将不胜感激任何想法。
试试这个正则表达式:
(?s)(?<=%>).*?(?=<%)
它具有正向后视(-ahead),(?s)
打开单行选项(在您的正则表达式引擎中可能不同)。
用“<%”标记拆分整个文本。
在每个子字符串中搜索“%>”文字。
将该位置之后的所有内容替换为空格。
重新加入所有子字符串。
解决方案将使用 \G
元字符:
(%>\R*|\G\R*(?!<%)).
并替换为
(注意结尾的 space)
参见正则表达式 live demo here
正则表达式细分:
(
捕获组 #1 开始
%>\R*
匹配 %>
和任何可选的尾随换行符
|
或
\G\R*(?!<%)
匹配主题字符串的开头或上一个匹配结束的地方,然后是任何可选的尾随换行符,前面没有 <%
)
捕获组 #1 结束
.
匹配单个字符(换行符除外)
Java代码:
s = s.replaceAll("(%>\R*|\G\R*(?!<%)).", " ");
免责声明
这假设,
您没有嵌套块
<%
和 %>
分隔符正确配对
<%
和 %>
永远不会在块外发生
我有以下文本文件(文件最多可能包含几百行):
<% some important text %> something <% important stuff %>
not important stuff <not important stuff>
<% some
important text
%>
基本上我需要用空格替换“<% %>”分隔符之间的任何内容。一行中可能多次出现 <% text %>。此外,<% %> 块可能分布在多行中,如上例所示。 结果应如下所示:
<% some important text %> <% important stuff %>
<% some
important text
%>
有什么处理方法的建议吗?尝试过正则表达式,很容易得到 <% text %> 但这还不够,我需要在模式不匹配的地方放置空格。 将不胜感激任何想法。
试试这个正则表达式:
(?s)(?<=%>).*?(?=<%)
它具有正向后视(-ahead),(?s)
打开单行选项(在您的正则表达式引擎中可能不同)。
用“<%”标记拆分整个文本。
在每个子字符串中搜索“%>”文字。
将该位置之后的所有内容替换为空格。
重新加入所有子字符串。
解决方案将使用 \G
元字符:
(%>\R*|\G\R*(?!<%)).
并替换为
(注意结尾的 space)
参见正则表达式 live demo here
正则表达式细分:
(
捕获组 #1 开始%>\R*
匹配%>
和任何可选的尾随换行符|
或\G\R*(?!<%)
匹配主题字符串的开头或上一个匹配结束的地方,然后是任何可选的尾随换行符,前面没有<%
)
捕获组 #1 结束.
匹配单个字符(换行符除外)
Java代码:
s = s.replaceAll("(%>\R*|\G\R*(?!<%)).", " ");
免责声明
这假设,
您没有嵌套块
<%
和%>
分隔符正确配对<%
和%>
永远不会在块外发生