使用正则表达式解析python字符串

时间:2011-12-19 09:37:13

标签: python regex

给定字符串#abcde#jfdkjfd,如何在两个#之间获取字符串?我也希望如果没有#对(表示没有#或只有一个#),该函数将返回None

3 个答案:

答案 0 :(得分:7)

>>> import re
>>> s = "abc#def#ghi#jkl"
>>> re.findall(r"(?<=#)[^#]+(?=#)", s)
['def', 'ghi']

<强>解释

(?<=#)  # Assert that the previous character is a #
[^#]+   # Match 1 or more non-# characters
(?=#)   # Assert that the next character is a #

答案 1 :(得分:2)

使用(?<=#)(\w+)(?=#)并捕获第一组。您甚至可以遍历包含多个嵌入字符串的字符串,它将起作用。

这同时使用积极的外观和积极的前瞻。

答案 2 :(得分:1)

如果您没有坚持使用正则表达式,并且愿意接受空列表而不是None,那么对于没有结果的情况,那么简单的方法是:

>>> "#abcde#jfdkjfd".split('#')[1:-1]
['abcde']

请注意,结果必须是一个列表,因为您可能有多个结果。

如果您坚持获取None而不是空列表(虽然不完美,因为这也会将任何空字符串转换为无):

>>> "#abcde#jfdkjfd".split('#')[1:-1] or None
['abcde']

如果您只想要第一个标记的字符串,那么您可以这样做:

>>> def first_marked(s):
    token = s.split('#')
    if len(token) >= 3:
        return token[1]
    else:
        return None


>>> first_marked("#abcde#jfdkjfd")
'abcde'
相关问题