给定字符串#abcde#jfdkjfd
,如何在两个#
之间获取字符串?我也希望如果没有#
对(表示没有#
或只有一个#
),该函数将返回None
。
答案 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'