Python重新匹配字符串中的最后一个下划线

2024-10-01 13:39:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一些像这样的绳子

S25m\S25m_16Q_-2dB.png
S25m\S25m_1_16Q_0dB.png
S25m\S25m_2_16Q_2dB.png

我想得到斜杠和最后一个下划线之间的字符串,以及最后一个下划线和扩展之间的字符串,所以

期望:

^{pr2}$

我可以通过

foo = "S25m\S25m_16Q_-2dB.png"
match = re.search(r'([a-zA-Z0-9_-]*)\.(\w+)', foo)
match.group(1)

但是我不知道如何创建一个模式,这样我就可以用最后一个下划线将其拆分。在


Tags: 字符串researchfoopngmatch模式group
3条回答

非正则表达式解决方案(尽管相当混乱):

>>> import os
>>> s = "S25m\S25m_16Q_-2dB.png"
>>> first, _, last = s.partition("\\")[2].rpartition('_')
>>> print (first, os.path.splitext(last)[0])
('S25m_16Q', '-2dB')

捕获您想要获取的组。在

>>> re.search(r'([-\w]*)_([-\w]+)\.\w+', "S25m\S25m_16Q_-2dB.png").groups()
('S25m_16Q', '-2dB')
>>> re.search(r'([-\w]*)_([-\w]+)\.\w+', "S25m\S25m_1_16Q_0dB.png").groups()
('S25m_1_16Q', '0dB')
>>> re.search(r'([-\w]*)_([-\w]+)\.\w+', "S25m\S25m_2_16Q_2dB.png").groups()
('S25m_2_16Q', '2dB')

*贪婪地匹配上一个字符集(尽可能多地使用);它继续到最后一个字符集_,因为\w包含字母、数字和下划线。在


^{pr2}$

我知道它说使用re,但为什么不直接使用split?在

strings = """S25m\S25m_16Q_-2dB.png
S25m\S25m_1_16Q_0dB.png
S25m\S25m_2_16Q_2dB.png"""

strings = strings.split("\n")

parts = []
for string in strings:
    string = string.split(".png")[0] #Get rid of file extension
    string = string.split("\\")
    splitString = string[1].split("_")
    firstPart = "_".join(splitString[:-1]) # string between slash and last underscore
    parts.append([firstPart, splitString[-1]])


for line in parts:
    print line
^{pr2}$

然后调换数组, 在

for line in zip(*parts):
    print line
('S25m_16Q', 'S25m_1_16Q', 'S25m_2_16Q')
('-2dB', '0dB', '2dB')

相关问题 更多 >