前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python标准模块shlex

python标准模块shlex

作者头像
py3study
发布2020-01-08 18:20:44
1.5K0
发布2020-01-08 18:20:44
举报
文章被收录于专栏:python3python3

shlex模块实现了一个类来解析简单的类shell语法,可以用来编写领域特定的语言,或者解析加引号的字符串。

处理输入文本时有一个常见的问题,往往要把一个加引号的单词序列标识为一个实体。根据引号划分文本可能与预想的并不一样,特别是嵌套有多层引号时。例:

有文本quotes.txt,内容如下

This string has embedded "double quotes" and 'single quotes' in it,

and even "a 'nested example'".

一种简单的方法是构造一个正则表达式,来查找引号之外的文本部分,将它们与引号内的文本分开,或者反之。这可能带来不必要的复杂性,而且很容易因为边界条件出错,如撇号或者拼写错误。更好地解决方案是使用一个真正的解析器,如shlex模块提供的解析器。以下是一个简单的例子,它使用shlex类打印输入文件中找到的token。

代码语言:javascript
复制
#!/usr/bin/python  import shlex import sys  if len(sys.argv) != 2:     print 'Please specify one filename on the command line.'     sys.exit(1)  filename = sys.argv[1] body = file(filename, 'rt').read() print 'ORIGINAL:', repr(body) print  print 'TOKENS:' lexer = shlex.shlex(body) for token in lexer:     print repr(token) 

执行    python  shlex_example.py  quotes.txt

结果

ORIGINAL: 'This string has embedded "double quotes" and \'single quotes\' in it,\nand even "a \'nested example\'".\n'

TOKENS:

'This'

'string'

'has'

'embedded'

'"double quotes"'

'and'

"'single quotes'"

'in'

'it'

','

'and'

'even'

'"a \'nested example\'"'

'.'

另外,孤立的引号(如I'm)也会处理。看以下文件

This string has an embedded apostrophe, doesn't it?

用shlex完全可以找出包含嵌入式撇号的token

执行    python  shlex_example.py  apostrophe.txt

结果:

ORIGINAL: "This string has an edbedded apostrophe, doesn't it?"

TOKENS:

'This'

'string'

'has'

'an'

'edbedded'

'apostrophe'

','

"doesn't"

'it'

'?'

可以看出shlex非常智能,比正则表达式方便多了。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-09-05 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档