【问题标题】:re.split doesnt work properly with a string coming from excel cellre.split 不适用于来自 excel 单元格的字符串
【发布时间】:2015-06-23 22:37:10
【问题描述】:

我有一个字符串:

05-01-2015 12:27 - KH - (KH) Igangværende - Opringning - 13-11 00:00 Fangede RLI på hans mobil。环 igen kl。 15 19-11-2014 11:17-KH- (KH) Igangværende - Opringning - 13-11 00:00 Gik på svarer igen og 在 ringe tilbage 延迟到 RLI。 2014 年 12 月 11 日 09:38 - KH - (KH) Igangværende - Opringning - 13-11 00:00 12-11-2014 09:32 - KH - (KH) Igangværende - Opringning - 15-10 00:00 Forsøgt RLI igen og lagt 请求 om han vil ringe。 14-10-2014 13:14 - KH - (KH) Igangværende - Opringning - 15-10 00:00 14-10-2014 13:10 - KH - (KH) Igangværende - Opringning - 14-10 00:00 Lagt besked til RLI at ringe 14-10-2014 13:06 - KH - (KH) Igangværende - Opringning - 14-10 00:00 测试

我将此字符串解析为多个片段,以便每个片段都以日期开头。为此,正如my other post about my task 中所解决的那样,我受益于正则表达式,例如:

match = re.search(r' (?=\d{2}-\d{2}-\d{4})', text)

当我将上面的字符串直接写入代码中的变量 text 时,没有问题。但是,如果我使用 xlrd 或其他从 excel 文件中的单元格获取此文本,我将无法正确获取值。我也尝试了对单元格值进行编码/解码。但我只在 match[0] 中获得整个文本。没有拆分 match1、match[2] 或其他。这是我尝试从 excel 文件中获取文本的方法:

# -*- coding: utf-8 -*-
import re
import xlrd

book = xlrd.open_workbook("liste1.xlsx")

# get the first worksheet
first_sheet = book.sheet_by_index(0)

# read a cell
cell = first_sheet.cell(1,5)

text=cell.value
match = re.split(r' (?=\d{2}-\d{2}-\d{4})', text)

print match[0]

你能帮我解决这个问题吗?

提前致谢。

【问题讨论】:

标签: python regex string parsing split


【解决方案1】:

你试过repr(text)之类的吗?

【讨论】:

  • 它到底是做什么的?
  • "返回一个包含对象可打印表示的字符串。" docs.python.org/3.4/library/functions.html#repr
  • 很遗憾没有。让我告诉你。有一个有趣的情况。当我从这篇文章中复制该文本时,我在 stackoverflow 中写道,它确实成功了。但是,如果我从 libreoffice 的 excel 单元格中复制相同的内容,它就不起作用了。
  • 是的,这可能是因为该单元格中有您在屏幕上看不到的控制字符。因此,当打印在屏幕上时,控制字符会自动删除,但是当您从该单元格读取时,您必须手动删除这些字符。
  • 抱歉,我从未使用过 LibreOffice,但这是我的猜测。在使用正则表达式之前需要删除一些控制字符,或者您需要稍微更改模式。
【解决方案2】:

我通过添加一行从单元格中删除非打印字符来解决此问题,如本文Unwanted Character in Excel cell 中所述:

# -*- coding: utf-8 -*-
import re
import xlrd

book = xlrd.open_workbook("liste1.xlsx")

# get the first worksheet
first_sheet = book.sheet_by_index(0)

# read a cell
cell = first_sheet.cell(1,5)

text= re.sub(r"[\r\n\t\x07\x0b]", "", cell.value)
match = re.split(r' (?=\d{2}-\d{2}-\d{4})', text)

print match[0]
print match[1]
print match[2]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多