python正则表达式,用于检查字符串中单词的开头和结尾

python正则表达式,用于检查字符串中单词的开头和结尾,python,regex,Python,Regex,我正在编写一个脚本来重命名文件。在这种情况下,有三种可能性 1.文件不存在:创建新文件 2.文件存在:创建文件名为“(文件出现次数)”的新文件。例如文件名(1) 3.文件副本已存在:创建文件名为“(文件出现次数)”的新文件。例如文件名(2) 我有一个字符串中的文件名。我可以使用正则表达式检查文件名的最后一个字符,但如何检查“(“to”)中的最后一个字符并获取其中的数字?您只需要这样的内容: (?<=\()(\d+)(?=\)[^()]*$) (?以下是基于现有文件名获取文件名的代码和测试

我正在编写一个脚本来重命名文件。在这种情况下,有三种可能性

1.文件不存在:创建新文件

2.文件存在:创建文件名为“(文件出现次数)”的新文件。例如文件名(1)

3.文件副本已存在:创建文件名为“(文件出现次数)”的新文件。例如文件名(2)


我有一个字符串中的文件名。我可以使用正则表达式检查文件名的最后一个字符,但如何检查“(“to”)中的最后一个字符并获取其中的数字?

您只需要这样的内容:

(?<=\()(\d+)(?=\)[^()]*$)

(?以下是基于现有文件名获取文件名的代码和测试:

import re

def get_name(filename, existing_names):
    exist = False
    index = 0

    p = re.compile("^%s(\((?P<idx>\d+)\))?$" % filename)

    for name in existing_names:
        m = p.match(name)
        if m:
            exist = True
            idx = m.group('idx')
            if idx and int(idx) > index:
                index = int(idx)
    if exist:
        return "%s(%d)" % (filename, index + 1)
    else:
        return filename

# test data
exists = ["abc(1)", "ab", "abc", "abc(2)", "ab(1)", "de", "ab(5)"]
tests = ["abc", "ab", "de", "xyz"]
expects = ["abc(3)", "ab(6)", "de(1)", "xyz"]

print exists
for name, exp in zip(tests, expects):
    new_name = get_name(name, exists)
    print "%s -> %s" % (name, new_name)
    assert new_name == exp
重新导入
def get_名称(文件名、现有_名称):
存在=错误
索引=0
p=重新编译(“^%s(\((?p\d+)\)?$%filename)
对于现有_名称中的名称:
m=p.match(名称)
如果m:
存在=真
idx=m.group('idx')
如果idx和int(idx)>索引:
索引=int(idx)
如果存在:
返回“%s(%d)”%(文件名,索引+1)
其他:
返回文件名
#测试数据
存在=[“abc(1)”,“ab”,“abc”,“abc(2)”,“ab(1)”,“de”,“ab(5)”]
测试=[“abc”、“ab”、“de”、“xyz”]
期望值=[“abc(3)”,“ab(6)”,“de(1)”,“xyz”]
印刷品存在
对于name,exp in zip(测试,预期):
新建名称=获取名称(名称,存在)
打印“%s->%s”%(名称,新名称)
断言新名称==exp
查看这一行,让正则表达式获得
(*)
中的数字:

p=re.compile(“^%s(\((?p\d+)\)?$%filename)


在这里,它对编号
\d+
使用命名的捕获
?p\d+
,稍后使用
m.group('idx')访问捕获

你能提供一些例子吗?我测试了演示链接,它工作得很好。但很抱歉太幼稚了。我是python正则表达式的新手。我如何使用它是python?这是一个更广泛的问题。你最好问一个新问题,然后发布你试图使用的代码。