Python 拆分方法和存储

Python 拆分方法和存储,python,regex,python-2.7,Python,Regex,Python 2.7,我试图使用split方法从该字符串中获取最后一个值,即0: d = 'Alert|6317fe57-6787-4132-b40e-6d2863c921cb|0' 并将其存储为名为m的变量。我正在使用以下代码,但由于某些原因,它失败了: import re d = 'Alert|6317fe57-6787-4132-b40e-6d2863c921cb|0' if re.split(('|')[-1], 'd') == 0: print 'ok' 虽然split方法应该返回0,但是我看

我试图使用
split
方法从该字符串中获取最后一个值,即0:

d = 'Alert|6317fe57-6787-4132-b40e-6d2863c921cb|0' 
并将其存储为名为
m
的变量。我正在使用以下代码,但由于某些原因,它失败了:

import re
d = 'Alert|6317fe57-6787-4132-b40e-6d2863c921cb|0'
if re.split(('|')[-1], 'd') == 0:
    print 'ok'

虽然
split
方法应该返回
0

,但是我看不到正在打印
'ok'
,首先,您的正则表达式已完全损坏,如果您费心测试它,您会发现这一点:

>>> re.split(('|')[-1], 'd')
['d']  # I doubt this is what you expected...
简言之:

  • [-1]
    位于错误的位置
  • 您使用的是字符串literal
    'd'
    而不是标识符
    d
    (因此,您试图处理的字符串实际上根本不涉及到这一点)
  • 括号实际上并不是表达式的一部分(在它们所在的位置是完全冗余的,
    (“|”)[-1]==“|”[-1]
    )-另外请注意,如果希望输出在结果中包含匹配项,则只需要在正则表达式中使用括号;及
  • 管道字符
    |
    在正则表达式中具有语义含义,因此必须转义
解决所有这些问题:

>>> re.split(r'(\|)', d)
['Alert', '|', '6317fe57-6787-4132-b40e-6d2863c921cb', '|', '0']
>>> re.split(r'(\|)', d)[-1]
'0'

即使修复了正则表达式,也会得到一个字符串,
'0'
,它永远不会等于
0

>>> '0' == 0
False
Python是动态的类型,但是是强类型的,因此不会隐式地转换两个参数进行比较。您需要将字符串显式转换为整数:

>>> int('0') == 0
True
或与字符串进行比较:

>>> '0' == '0'
True

然而,实际上没有必要为此使用
re.split
;我只想使用标准字符串方法:

它可以最大限度地减少所需的拆分操作(以及新的字符串对象)的数量,或者只需测试我是否需要:

>>> d.endswith('|0')
True

它最多可以测试两个字符,因此效率更高。

首先,您的正则表达式已完全损坏,如果您费心测试它,您会发现这一点:

>>> re.split(('|')[-1], 'd')
['d']  # I doubt this is what you expected...
简言之:

  • [-1]
    位于错误的位置
  • 您使用的是字符串literal
    'd'
    而不是标识符
    d
    (因此,您试图处理的字符串实际上根本不涉及到这一点)
  • 括号实际上并不是表达式的一部分(在它们所在的位置是完全冗余的,
    (“|”)[-1]==“|”[-1]
    )-另外请注意,如果希望输出在结果中包含匹配项,则只需要在正则表达式中使用括号;及
  • 管道字符
    |
    在正则表达式中具有语义含义,因此必须转义
解决所有这些问题:

>>> re.split(r'(\|)', d)
['Alert', '|', '6317fe57-6787-4132-b40e-6d2863c921cb', '|', '0']
>>> re.split(r'(\|)', d)[-1]
'0'

即使修复了正则表达式,也会得到一个字符串,
'0'
,它永远不会等于
0

>>> '0' == 0
False
Python是动态的类型,但是是强类型的,因此不会隐式地转换两个参数进行比较。您需要将字符串显式转换为整数:

>>> int('0') == 0
True
或与字符串进行比较:

>>> '0' == '0'
True

然而,实际上没有必要为此使用
re.split
;我只想使用标准字符串方法:

它可以最大限度地减少所需的拆分操作(以及新的字符串对象)的数量,或者只需测试我是否需要:

>>> d.endswith('|0')
True

这将最多测试两个字符,因此效率更高。

>>导入re>>>d='Alert | 6317fe57-6787-4132-b40e-6d2863c921cb | 0'>>如果重新拆分((“|”)[-1],'d')==0:。。。打印“确定”…>>>>>如上所述,虽然拆分函数应该返回0,但我看不到正在打印ok。请帮助>>>导入re>>>d='Alert | 6317fe57-6787-4132-b40e-6d2863c921cb | 0'>>如果重新拆分((“|”)[-1],'d')==0:。。。打印“确定”…>>>>>如上所述,虽然拆分函数应该返回0,但我看不到正在打印ok。请help@VigneshKalai谢谢它一开始是“你正在将一个字符串与一个整数进行比较”,然后从那里开始失控;o) @VigneshKalai谢谢!它一开始是“你正在将一个字符串与一个整数进行比较”,然后从那里开始失控;o)