在python中使用正则表达式匹配文件名

时间:2017-07-18 08:56:49

标签: python regex

我正在寻找一个regex命令来匹配文件夹中的文件名。我已经在列表中获得了所有文件名。现在我想匹配循环中的模式(文件是要匹配的字符串):

var Book = new Book{ statusId = rent.Id };
db.SecondTable.Add(Book);
db.SaveChanges();

with:

./test1_word1_1.1_1.2_1.3.csv

我过去常常使用正则表达式,但在这种特殊情况下它很简单并不起作用。你能帮帮我吗?

我希望以下列方式继续正则表达式的匹配(我已经在这里写了结果):

match = re.search(r'./{([\w]+)}_word1_{([0-9.]+)}_{([0-9.]+)}_{([0-9.]+)}*',file)

大括号是我的错。他们根本没有意义。对不起

祝你好运, 塞巴斯蒂安

2 个答案:

答案 0 :(得分:1)

您可以使用

r'\./([^\W_]+)_word1_([0-9.]+)_([0-9.]+)_([0-9]+(?:\.[0-9]+)*)'

请参阅regex demo

<强>详情:

  • \. - 一个字面点(如果它未转义,则匹配除换行符之外的任何字符)
  • / - 一个/符号(无需以Python正则表达式模式转义)
  • ([^\W_]+) - 第1组匹配1个或多个字母或数字(如果您要匹配包含_的数据块,请保留原始(\w+)模式)
  • _word1_ - 文字子字符串
  • ([0-9.]+) - 第1组匹配1位或多位数字和/或.符号
  • _ - 下划线
  • ([0-9.]+) - 第2组匹配1位或多位数字和/或.符号
  • _ - 下划线
  • ([0-9]+(?:\.[0-9]+)*) - 第3组匹配1个或多个数字,然后是0个.和1个或更多数字的序列

Python demo

import re
rx = r"\./([^\W_]+)_word1_([0-9.]+)_([0-9.]+)_([0-9]+(?:\.[0-9]+)*)"
s = "./test1_word1_1.1_1.2_1.3.csv"
m = re.search(rx, s)
if m:
    print("Part1: {}\nPart2: {}\nPart3: {}\nPart4: {}".format(m.group(1), m.group(2), m.group(3), m.group(4) ))

输出:

Part1: test1
Part2: 1.1
Part3: 1.2
Part4: 1.3

答案 1 :(得分:1)

由于test_word&lt;&gt; .csv是&lt;&gt;内的文件名和内容将永远改变,并以点分隔数字,你能试试吗?

R&#34; test1_word * CSV&#34 [_0-9。];克

示例代码和测试字符串

# coding=utf8
# the above tag defines encoding for this document and is for Python 2.x compatibility

import re

regex = r"test1_word[_0-9.]*.csv"

test_str = ("./test1_word1_1.1_1.2_1.3.csv\n"
    "./test1_word1_1.31.2_1.555.csv\n"
    "./test1_word1_10.31.2_2000.00.csv")

matches = re.finditer(regex, test_str)

for matchNum, match in enumerate(matches):
    matchNum = matchNum + 1

    print ("Match {matchNum} was found at {start}-{end}: {match}".format(matchNum = matchNum, start = match.start(), end = match.end(), match = match.group()))

    for groupNum in range(0, len(match.groups())):
        groupNum = groupNum + 1

        print ("Group {groupNum} found at {start}-{end}: {group}".format(groupNum = groupNum, start = match.start(groupNum), end = match.end(groupNum), group = match.group(groupNum)))

# Note: for Python 2.7 compatibility, use ur"" to prefix the regex and u"" to prefix the test string and substitution.

想要测试? https://regex101.com/会帮助你。