【问题标题】:How to remove ASP comments-only blocks in Python (on Sublime Text 2)?如何在 Python 中删除 ASP 仅注释块(在 Sublime Text 2 上)?
【发布时间】:2015-11-24 18:06:51
【问题描述】:

我正在使用 Python Regex,以清理为经典 ASP 页面生成的代码。

我需要删除单行或多行 ASP 评论块。 (ASP 注释行通常以 quote 开头)。

我的目标是匹配不包含可执行代码的块,而只匹配包含 cmets 的块。 cmets中是否有制表符或空格,我需要将这3个字符串替换为任何内容:

字符串 1:

<%'     This multiline comment starts with two TAB characters after the quote
'and continues here
%>

字符串 2:

<%    'This multiline comment starts with SPACES characters before the quote
        'and continues here, with TABS before the quote
    '     and with spaces before and after the quote
%>

字符串 3:

<%'This single line comment should at least be easy to remove%>

我尝试了以下正则表达式,但只取得了部分成功……:-/

output = re.sub(r'(<%(.*?)\')(.*?)(%>)', r'', output)
output = re.sub(r'<%(\t*|\s*)\'(.*)(%>)', r'', output)

你能给我一点建议吗? 非常感谢您的帮助:任何提示将不胜感激;-)

【问题讨论】:

  • 也许一个简单的&lt;%[\S\s]*?%&gt; 就是如何解析它。注释样式标记通常是第一个分隔符到下一个分隔符。
  • 感谢 sln :) 您的正则表达式可以工作,但可以针对任何 ASP 代码块,包括那些包含有用代码的代码块。我认为采用的策略是匹配每一行:1.- 以 \n (newline) 开头,2.- 后跟空格或制表符,3.- 然后加上引号。最终可以通过三个连续的正则表达式来完成,以便“更容易”找到引用(我的圣杯!)不幸的是,我无法成功制作正确的正则表达式字符串..哎哟!

标签: python regex asp-classic sublimetext2 sublime-text-plugin


【解决方案1】:

重新开始。
假设:

如果该行以单引号开头,则为注释。
获取所有带有 only 引号行的块。
. metachar not 匹配换行符。

&lt;%(?:\s*'.*)+\s*%&gt;

格式化

 <%
 (?: \s* ' .* )+
 \s* 
 %>

这与您的所有样本相匹配。

编辑

不过,为了安全起见,您应该在该点之前使用否定断言。

&lt;%(?:\s*'(?:(?!%&gt;).)*)+\s*%&gt;

格式化

 <%
 (?:
      \s* ' 
      (?:
           (?! %> )
           . 
      )*
 )+
 \s* 
 %>

【讨论】:

  • 嗨,sln,你非常非常接近!它完全有效,除了它还匹配以下块:1. 以引号开头(带或不带空格),但也 2. 包含有用的代码。我认为您的代码只需要检测在结束 %> 之前是否只有 \n 或空格,这将是完美的!
  • 哦,我明白了。所以注释行前面只是一个引号。
  • @AlexLaforge - 试试新的正则表达式。
  • 你好 sln :它工作,它摇滚!你真的是救生员!你的想法太棒了:你的假设是完全正确的,我忘了把它们表达得这么清楚:每一行都必须以引号开头,这就是线索。您成功地阅读了我的字里行间:-)我不是很好,但对正则表达式并不是很烂,但是毫无疑问,您肯定打败了我^!^您的个人资料没有撒谎:它说您是正则表达式专家:我完全同意。非常感谢和问候!! (我已将您的答案标记为好答案)
  • @AlexLaforge - 欢迎来到 SO。但请注意,人们会因为这种谈话而大吃一惊......
猜你喜欢
  • 2014-01-23
  • 2017-02-20
  • 2013-05-06
  • 2013-04-26
  • 1970-01-01
  • 2014-11-12
  • 1970-01-01
  • 2016-02-22
  • 1970-01-01
相关资源
最近更新 更多