正则表达式:不匹配括号内内容,仅匹配字母、数字和空格,点后不匹配内容

0 投票
3 回答
1259 浏览
提问于 2025-04-17 18:33

比如,我有一个文件名 [foo] FooBar[!].bar

我想知道怎么用正则表达式来匹配 FooBar,但不想匹配 [foo][!].bar

顺便说一下,我是在用Python的正则表达式,如果这有什么关系的话。

简单来说,我想匹配那些不在点后面,或者不在括号里的内容。

3 个回答

0

你可以把所有的内容都替换掉:

>>> re.sub(r'\[.*?\]|\..*', '', '[foo] FooBar[!].bar')
    ' FooBar'
0
(?:^|])(?!\.)([\w\s]+)(?:\[|$)'

这个规则应该能匹配任何由单词和空格组合而成的内容,这些内容要被][包围,或者是在字符串的开头和结尾,并且前面不能有一个点。

2
fileName = '[abc][def]Real Name[!].exe'
name = re.search('(\[[^]]*\])*([\w\s]+)', fileName).group(2)
print name

这段代码应该会输出'真实姓名'

撰写回答