python – 使用pyparsing更正注释
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 使用pyparsing更正注释,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3712字,纯文字阅读大概需要6分钟。
内容图文
![python – 使用pyparsing更正注释](/upload/InfoBanner/zyjiaocheng/777/8ee31e62546e4d06abf86a0ca4d0fadb.jpg)
我正在使用pyparsing在“CREATE TABLE”之后添加分号(“;”).如果我有这个输入:
CREATE TABLE A ( B VARCHAR(255) )
该程序将提供下一个输出:
CREATE TABLE A ( B VARCHAR(255) );
当有评论时会出现问题,例如:
CREATE TABLE A ( B VARCHAR(255) )
--Comment
该计划提供的地方:
CREATE TABLE A ( B VARCHAR(255) )
--Comment
;
这是代码:
import pyparsing as par
alphanumsword = par.Word(par.alphanums + "_")
element = "(" + alphanumsword + ")" | alphanumsword
row = par.OneOrMore(element)
rows = row + par.OneOrMore("," + row) | row
semicolon = par.Literal(";")
comment1 = par.Literal("--") + par.restOfLine + par.LineEnd()
createtable = par.CaselessLiteral("create") + par.CaselessLiteral("table")
+ alphanumsword + "(" + rows + ")" + ~semicolon
createtable.ignore(comment1)
createtable.ignore(par.cStyleComment)
text = \
"""
CREATE TABLE PERSON
(
/* Comment */
/*
Comment
*/
ID VARCHAR(255),
NAME VARCHAR(255), -- Comment
--- Comment
ADDRESS VARCHAR(255) NULL, -- Comment
CONSTRAINT PK_PERSON PRIMARY KEY (ID)
)
-- Comment
CREATE TABLE A ( B VARCHAR(255) )
"""
text_list = list(text)
offset = 0
for t,s,e in createtable.scanString(text):
print "(", t, ",", s, ",", e, ")"
print "||", text[s:e], "||"
text_list.insert(e + offset, ';')
offset += 1
print "".join(text_list)
解决方法:
使用?(分号| comment1)代替?(分号).
import pyparsing as par
alphanumsword = par.Word(par.alphanums + "_")
element = "(" + alphanumsword + ")" | alphanumsword
#element = alphanumsword + "(" + alphanumsword + ")" | alphanumsword
row = par.OneOrMore(element)
rows = row + par.OneOrMore("," + row) | row
semicolon = par.Literal(";")
comment1 = par.Literal("--") + par.restOfLine + par.LineEnd()
createtable = par.CaselessLiteral("create") + par.CaselessLiteral("table") \
+ alphanumsword + "(" + rows + ")" + ~( semicolon | comment1 )
createtable.ignore(comment1)
createtable.ignore(par.cStyleComment)
text = \
"""
--- this is comment
CREATE TABLE PERSON
(
/* Comment */
/*
Comment
*/
ID VARCHAR(255),
NAME VARCHAR(255), -- Comment
--- Comment
ADDRESS VARCHAR(255) NULL, -- Comment
CONSTRAINT PK_PERSON PRIMARY KEY (ID)
)
-- Comment
CREATE TABLE A ( B VARCHAR(255) ) --comment
CREATE TABLE A ( B VARCHAR(255) );
CREATE TABLE A ( B VARCHAR(255) )
CREATE TABLE A ( B VARCHAR(255) );
--Commentasfkjaskfj
"""
text_list = list(text)
offset = 0
for t,s,e in createtable.scanString(text):
print "(***", t, ",", s, ",", e, "**)"
print "||\n", text[s:e], "\n||"
print "s: %d, e: %d" % (s, e)
text_list.insert(e + offset , ';')
offset += 1
print "******************************"
print "".join(text_list)
输出:
(*** ['create', 'table', 'PERSON', '(', 'ID', 'VARCHAR', '(', '255', ')', ',', 'NAME', 'VARCHAR', '(', '255', ')', ',', 'ADDRESS', 'VARCHAR', '(', '255', ')', 'NULL', ',', 'CONSTRAINT', 'PK_PERSON', 'PRIMARY', 'KEY', '(', 'ID', ')', ')'] , 22 , 243 **)
||
CREATE TABLE PERSON
(
/* Comment */
/*
Comment
*/
ID VARCHAR(255),
NAME VARCHAR(255), -- Comment
--- Comment
ADDRESS VARCHAR(255) NULL, -- Comment
CONSTRAINT PK_PERSON PRIMARY KEY (ID)
)
||
s: 22, e: 243
******************************
(*** ['create', 'table', 'A', '(', 'B', 'VARCHAR', '(', '255', ')', ')'] , 257 , 290 **)
||
CREATE TABLE A ( B VARCHAR(255) )
||
s: 257, e: 290
******************************
(*** ['create', 'table', 'A', '(', 'B', 'VARCHAR', '(', '255', ')', ')'] , 336 , 369 **)
||
CREATE TABLE A ( B VARCHAR(255) )
||
s: 336, e: 369
******************************
--- this is comment
CREATE TABLE PERSON
(
/* Comment */
/*
Comment
*/
ID VARCHAR(255),
NAME VARCHAR(255), -- Comment
--- Comment
ADDRESS VARCHAR(255) NULL, -- Comment
CONSTRAINT PK_PERSON PRIMARY KEY (ID)
);
-- Comment
CREATE TABLE A ( B VARCHAR(255) ); --comment
CREATE TABLE A ( B VARCHAR(255) );
CREATE TABLE A ( B VARCHAR(255) );
CREATE TABLE A ( B VARCHAR(255) );
--Commentasfkjaskfj
内容总结
以上是互联网集市为您收集整理的python – 使用pyparsing更正注释全部内容,希望文章能够帮你解决python – 使用pyparsing更正注释所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。