切断python字符串

时间:2013-12-10 18:34:56

标签: python string

我有一个字符串,

a = '(abcd: fgh 234) (abcd: d89 7j6) (pqrs: ..1000000002.) (xyz: 0983)'

我只需要价值'fgh 234',但我很难削减这个字符串。请帮忙。

我尝试创建dict但没有帮助,因为'abcd'出现两次,它变为2nd而不是first。此外,尝试使用拆分,但对我不起作用。我之前没有知道re模块,但是修复了我的问题。谢谢大家的帮助!

3 个答案:

答案 0 :(得分:2)

由于我们不知道“切断字符串”究竟意味着什么,因此有很多方法可以做到这一点。正则表达式方法已被涵盖。如果您想要的数据始终位于字符串中的相同位置,那么简单的slice就可以解决问题:

>>> a[7:14]
'fgh 234'

答案 1 :(得分:1)

我会在这里使用re.search

>>> from re import search
>>> a = '(abcd: fgh 234) (abcd: d89 7j6) (pqrs: ..1000000002.) (xyz: 0983)'
>>> search("\(abcd:\s(.+?)\)", a).group(1)
'fgh 234'
>>>

以下是正则表达式模式的细分:

\(     # Opening parenthesis
abcd:  # abcd:
\s     # Space
(.+?)  # One or more characters captured non-greedily
\)     # Closing parenthsis

答案 2 :(得分:1)

这取决于'切断此字符串'的含义?什么保持不变?

琐碎的是,您可以使用正则表达式在第一个:和第一个)之间'剪切字符串':

>>> import re
>>> a = '(abcd: fgh 234) (abcd: d89 7j6) (pqrs: ..1000000002.) (xyz: 0983)'
>>> re.search(r':\s([^)]+)', a).group(1)
'fgh 234'

您可以使用相同的技术来获取:和结束)之间的所有元素与正则表达式:

>>> re.findall(r':\s([^)]+)', a)
['fgh 234', 'd89 7j6', '..1000000002.', '0983']

然后索引你想要的那个:

>>> re.findall(r':\s([^)]+)', a)[0]
'fgh 234'
>>> re.findall(r':\s([^)]+)', a)[1]
'd89 7j6'

通过更多细节,我可以提供更具体的正则表达式。

或者,使用Python字符串操作的非正则表达式:

>>> a[a.index(':')+2:a.index(')')]
'fgh 234'