解决文本规范化任务的Python方法

Lingxi

基本上,我有一个Hive脚本文件,我需要从中提取所有已创建表的名称。例如,从内容

...
create table Sales ...
...
create external table Persons ...
...

SalesPersons应将其提取。为此,我的基本想法是:

  1. 搜索关键短语create tablecreate external table
  2. 提取下一个标记,该标记应为表名称。

但是,输入可能不规范。例如,

  1. 制表符/换行符可以与空格一起用作令牌定界符
  2. 令牌之间可能有多个连续的定界符
  3. 混合使用大小写字母,例如 create TABLE

因此,我正在考虑在应用基本算法之前先将输入规范化为规范形式。然后,我做了一些努力,提出了以下建议

' '.join(input.split()).lower()

作为Python的新手,我想知道这是解决问题的Pythonic方式,还是一开始就有缺陷?有没有一种简单的方法可以以流方式执行此操作,即避免立即将整个输入加载到内存中?

编剧

就像一些评论所说,正则表达式是一种获取所需内容的简洁明了的方法。如果您不介意获得小写结果,则此方法应该可以工作:

import re
my_str = """
...
create table Sales ...
create TabLE  
 test
create external table Persons ...
...
"""
pattern = r"table\s+(\w+)\b"
items = re.findall(pattern, my_str.lower())
print items

它捕获“ table”之后的下一个单词(随后至少一个空格/换行符)。

要获取表名称的原始大小写:

for x, item in enumerate(items):
    i = my_str.lower().index(item)
    items[x] = my_str[i:i+len(item)]
print items

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章