例如,我想解析带有三双引号之间的文本的python文件,并从该文本中制作html表。
例如这样的文本块
"""
Replaces greater than operator ('>') with 'NOT BETWEEN 0 AND #'
Replaces equals operator ('=') with 'BETWEEN # AND #'
Tested against:
* Microsoft SQL Server 2005
* MySQL 4, 5.0 and 5.5
* Oracle 10g
* PostgreSQL 8.3, 8.4, 9.0
Requirement:
* Microsoft Access
Notes:
* Useful to bypass weak and bespoke web application firewalls that
filter the greater than character
* The BETWEEN clause is SQL standard. Hence, this tamper script
should work against all (?) databases
>>> tamper('1 AND A > B--')
'1 AND A NOT BETWEEN 0 AND B--'
>>> tamper('1 AND A = B--')
'1 AND A BETWEEN B AND B--'
"""
Html 表格必须是包含 5 列的简单表格
- 列
"""
和n if new line is empty
之间的所有内容 - 列
Tested against:
和n if new line is empty
或Requirement:
和n if new line is empty
之间的所有内容 - 列
Notes:
和n if new line is empty
之间的所有内容 - 列
>>>
和n
之间的所有内容 - 列
4 column end
和n
之间的所有内容
所以结果必须是:
- 将大于运算符 (">") 替换为"不在 0 和 # 之间" 将等于运算符 ('=') 替换为 'BETWEEN # AND #'
Microsoft SQL Server 2005
- MySQL 4、5.0 和 5.5
- 甲骨文 10g
- PostgreSQL 8.3, 8.4, 9.0
或
- Microsoft访问
- 有助于绕过弱和定制的 Web 应用程序防火墙 筛选大于字符
- BETWEEN 子句是 SQL 标准。因此,这个篡改脚本 应该适用于所有 (?) 数据库
篡改('1 和 A> B--') 篡改('1 和 A = B--')
"1 和 A 不在 0 和 B 之间——" "1 和 A 在 B 和 B 之间——">
我可以使用哪种语法来提取它? 我将使用 VBScript.RegExp
。Set fso = CreateObject("Scripting.FileSystemObject")
txt = fso.OpenTextFile("C:pathtoyour.py").ReadAll
Set re = New RegExp
re.Pattern = """([^""]*)"""
re.Global = True
For Each m In re.Execute(txt)
WScript.Echo m.SubMatches(0)
Next
你的问题很宽泛,所以我只概述一种处理这个问题的方法。否则我将不得不为你编写整个脚本,这不会发生。
-
提取文档引用之间的所有内容。使用这样的正则表达式来提取文档引号之间的文本:
Set re1 = New RegExp re1.Pattern = """""""([sS]*?)""""""" For Each m In re1.Execute(txt) docstr = m.SubMatches(0) Next
请注意,如果您的文件中有超过 1 个文档字符串并希望处理所有文档字符串,则需要将
re.Global
设置为True
。否则,您将只获得第一场比赛。 -
使用第二个正则表达式删除前导和尾随空格:
Set re2 = New RegExp re2.Pattern = "^s*|s*$" re2.Global = True 'find all matches docstr = re2.Replace(docstr, "")
您不能为此使用
Trim
,因为该函数仅处理空格,而不处理其他空格。 -
要么在 2+ 个连续换行符处拆分字符串以获取文档部分,要么使用另一个正则表达式提取它们:
Set re3 = New RegExp re3.Pattern = "([sS]*?)rnrn" + "Tested against:rn([sS]*?)rnrn" + ... For Each m In re3.Execute(txt) descr = m.SubMatches(0) tested = m.SubMatches(1) ... Next
继续细分这些部分,直到获得要显示的元素。然后从这些元素构建 HTML。