对,我一开始误解了你的问题。虽然str.split
这肯定是解决这个问题的一种更优雅的方法,但这里有三个正则表达式可以满足您的需求。我不知道你的这个应用程序是否适用于他们。所以把这个和一粒盐一起吃。
请查看re库和MatchObject.span()以获取更多信息。
作为单个正则表达式:
import re
line = "cannon_mac_23567_prsln_333"
In [1812]: match = re.match(r"(.+?)(\_)(.+?)\_", line)
In [1813]: match.groups()
Out[1813]: ('cannon', '_', 'mac')
In [1814]: match.span(2)[0] <-- second group, start. The first occurence of _
Out[1814]: 6
In [1815]: line[6]
Out[1815]: '_'
分隔在 a、b、c 中:
A:
import re
line = "cannon_mac_23567_prsln_333"
In [1707]: match = re.match(r"(.+?)\_", line)
In [1708]: match.groups()
Out[1708]: ('cannon',)
乙:
In [1712]: match = re.match(r".+\_(.+?)\_", line)
In [1713]: match.groups()
Out[1713]: ('prsln',)
c:为了简单起见,最后一个使用 re.search。MatchObject.span()
返回一个位置元组(start, end)
In [1763]: match = re.search("\_", line)
In [1764]: match.span()[0]
Out[1764]: 6
In [1765]: line[6]
Out[1765]: '_'