python-3.x 提取特定模式后的字符串

6ojccjat  于 2022-12-20  发布在  Python
关注(0)|答案(4)|浏览(138)
"C:\Users\Adam\Desktop\Stock Trackers\Stock Tracker WK39 NYC Beauty.xlsx"

我想提取"Stock Tracker WK39"之后的所有内容,因为这表示公司名称,但是,"WK"之后的数字可能会根据文件的不同而变化,因此我不能只使用例如:

str.extract('Stock Tracker WK39 (.*)')

如何重写上面的代码,使"39"成为一个可以表示任何数字的标识符(包括表示第1-9周的个位数),使脚本总是忽略"Stock Tracker WKXX "之前的所有内容,只获取白色后面的内容?
请记住,“纽约美容”之间有一个空间,但会有其他公司不会,例如"ProformaUnlimited"是另一家公司。

n7taea2i

n7taea2i1#

我会使用os模块来获取你的文件名,然后我们可以从中提取你想要的信息,既然你说字符串应该总是以“Stock Tracker WK”开头,我就使用这个假设。

import os

directory = "C:\\Users\\Adam\\Desktop\\Stock Trackers"
files = os.listdir(directory)
companyNameLength = len("Stock Tracker WK")

weekNumbers = []
otherCompanyNames = []
for file in files:
     weekNumbers.append(file[companyNameLength:].split(" ")[0])
     otherCompanyNames.append(" ".join(file[companyNameLength:].split(" ")[1:]))

print(weekNumbers)
print(otherCompanyNames)

注意:如果您在此文件夹中有不同命名约定的文件,您可能会看到空列表元素

j0pj023g

j0pj023g2#

你可以使用一个正则表达式来精确地提取这些值。这里有一个例子https://regex101.com/r/6u2xBz/1
代码示例:

import re

regex = r"^.*Stock Tracker WK(?P<week_no>\d+) (?P<name>.*)$"

test_str = "C:\\Users\\Adam\\Desktop\\Stock Trackers\\Stock Tracker WK39 NYC Beauty.xlsx"

matches = re.search(regex, test_str)

if matches:
    print ("Match was found at {start}-{end}: {match}".format(start = matches.start(), end = matches.end(), match = matches.group()))
    
    for groupNum in range(0, len(matches.groups())):
        groupNum = groupNum + 1
        
        print ("Group {groupNum} found at {start}-{end}: {group}".format(groupNum = groupNum, start = matches.start(groupNum), end = matches.end(groupNum), group = matches.group(groupNum)))
jk9hmnmh

jk9hmnmh3#

text = 'C:\Users\Adam\Desktop\Stock Trackers\Stock Tracker WK39 NYC Beauty.xlsx'
text = text.split('WK')
text = text[-1]
text = text[2:]

紧凑型:

text = 'C:\Users\Adam\Desktop\Stock Trackers\Stock Tracker WK39 NYC Beauty.xlsx'
text = text.split('WK')[-1][2:]
p4rjhz4m

p4rjhz4m4#

我确信其他人会提出正则表达式的解决方案,但是如果你不想使用正则表达式,并且(假设)WK39之前的部分不会更改为包含另一个WK,你可以通过几个拆分来实现,例如:

x = r"C:\Users\Adam\Desktop\Stock Trackers\Stock Tracker WK39 NYC Beauty.xlsx"
x.split('WK', 1)[-1].split(' ', 1)[1]

对WK进行第一次拆分,得到39 NYC Beauty.xlsx,第二次拆分,得到NYC Beauty.xlsx
这利用了split的maxsplit参数,使得例如.split(' ', 1)仅在其遇到的第一个空格上进行拆分,从而使NYC Beauty.xlsx作为单个字符串离开。

相关问题