Pythonic解析这个字符串的方法?

时间:2014-01-06 09:17:20

标签: python regex string python-2.7

我正在解析此line -

0386          ; Greek # L&       GREEK CAPITAL LETTER ALPHA WITH TONOS

基本上,我需要 -

point = 0386
script = Greek

我这样做,

point = line.split(";")[0].replace(" ","")
script = line.split("#")[0].split(";")[1].replace(" ","")

我不相信我所做的是最狡猾的做法,有更优雅的方式吗?也许是一个正则表达式的单行程序?

4 个答案:

答案 0 :(得分:3)

如果你想要一个正则表达式:

point, script = re.search("^(\d+)\s*;\s*(\S+)\s*.*$",s).groups()

其中s是您的字符串,当然您需要import re

答案 1 :(得分:3)

>>> code, desc = line[:line.rfind('#')].split(';')
>>> code.strip()
'0386'
>>> desc.strip()
'Greek'

答案 2 :(得分:2)

使用map与未绑定方法str.strip

>>> line = '0386      ; Greek # L&   GREEK CAPITAL LETTER ALPHA WITH TONOS'
>>> point, script = map(str.strip, line.split('#')[0].split(';'))
>>> point
'0386'
>>> script
'Greek'

使用列表理解:

>>> point, script = [word.strip() for word in line.split('#')[0].split(';')]
>>> point
'0386'
>>> script
'Greek'

答案 3 :(得分:0)

我就是这样做的:

>>> s = "0386          ; Greek # L&       GREEK CAPITAL LETTER ALPHA WITH TONOS"
>>> point = s.split(';')[0].strip()
>>> point
'0386'
>>> script = s.split(';')[1].split('#')[0].strip()
>>> script
'Greek'

请注意,您可以重复使用s.split(';')。所以将它保存到var可能是一个好主意:

>>> var = s.split(';')
>>> point = var[0].strip()  # Strip gets rid of all the whitespace
>>> point
'0386'
>>> script = var[1].split('#')[0].strip()
>>> script
'Greek'