【问题标题】:Python split not recognizing hyphenPython拆分不识别连字符
【发布时间】:2017-07-07 03:47:42
【问题描述】:

我导入了一张表格,其中包含每位教练担任足球教练的年份。列出的一些年份如下所示:“1903–1910, 1917, 1919”

我的目标是 [1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1917, 1919]

在我原来的 DataFrame 中,这个列表是一个对象。

我试过了:

x = "1903–1910, 1917, 1919"

x[0].split('-')

re.split(r'\s|-', x[0])

x[0].replace('-', ' ').split(' ')

我不断得到:

['1903–1910']

我做错了什么?为什么 python 找不到连字符?

【问题讨论】:

  • 年份是字符串吗?
  • 在第二次尝试中,x[0] 是单个字符,因此x[0].split('-')'1'.split('-') 相同。根据你的目标,你应该先用逗号分割,然后在每个结果中用连字符分割。
  • @SciProg 以某种方式在他的所有尝试中

标签: python


【解决方案1】:

您看到的连字符并不是真正的连字符。它可能是其他字符,例如看起来非常相似的 unicode en-dash。

尝试将实际字符复制粘贴到拆分字符串中。

看看你发布的文字,区别如下:

➜  ~ echo '1903–1910' | xxd
00000000: 3139 3033 e280 9331 3931 300a            1903...1910.
➜  ~ echo '1903-1910' | xxd
00000000: 3139 3033 2d31 3931 300a                 1903-1910.

第一种情况的字符是:https://unicode-table.com/en/2013/

【讨论】:

  • 谢谢。这让我发疯了。
【解决方案2】:

你的角色不是海芬,而是短跑:

>>> "–" == "-"
False
>>> x = "1903–1910, 1917, 1919"
>>> x.split("–")
['1903', '1910, 1917, 1919']

【讨论】:

  • 谢谢。错过这是我专注于森林而不是树木的结果。
【解决方案3】:

这可行,但不是最佳的

# -*- coding: utf-8 -*-
x = "1903–1910, 1917, 1919"
endash = '–'
years = x.split(', ')
new_list = []
for year in years:
    if endash in year:
        start, finish = year.split(endash)
        new_list.extend(range(int(start), int(finish)+1))
    else:
        new_list.append(int(year))
print new_list

输出:[1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1917, 1919]

【讨论】:

  • @Jackie 你能试试这个解决方案吗?它应该能解决你的终极问题
  • 感谢您的帮助!
  • 刚刚修复完我的数据框,您的解决方案非常有用。
  • 很高兴为您提供帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-06
  • 1970-01-01
  • 2010-09-30
  • 1970-01-01
相关资源
最近更新 更多