文件命名为
name date _ uniqueid.pdf
结果应该是
name date _ somethingelse.pdf
我将使用查找/替换,所以不要担心替换部分。我只想搜索匹配下划线。
这不适用于c#.net,它适用于在另一个接受正则表达式的程序中查找和替换。
我真的很抱歉我应该提到这一点。没有语言,只有普通的正则表达式。即。 /[^_].*
谢谢!
答案 0 :(得分:2)
这是一个不考虑文件名中的任何无效字符的示例
[^_]*_(.+)\..+
该正则表达式的第1组将在您的第一个示例中返回uniqueid。如果您还想捕获文件扩展名,可以使用以下内容。
[^_]*_(.+)
修改强>
使用Regex.replace的C#示例
//With file extension option
Regex.Replace(Test, "([^_]*_).+(\\..+)", "$1somethingelse$2");
//Change file extension option
Regex.Replace(Test, "([^_]*_).+\\..+", "$1somethingelse.pdf");
答案 1 :(得分:0)
这可能是一个愚蠢的问题,但是
有什么问题r = /name date _ [[:alnum:]]+.pdf/
(Ruby风格)
答案 2 :(得分:0)
假设此正则表达式适用于.net c#
Regex.Replace("name date _ uniqueid.pdf",@"(?<=_ )(\w+)(?=\.pdf)",@"somthingelse");
(?<= look behind to see if there is:
_ '_ '
) end of look-behind
( group and capture to \1:
\w+ word characters (a-z, A-Z, 0-9, _) (1 or
more times (matching the most amount
possible))
) end of \1
(?= look ahead to see if there is:
\. '.'
pdf 'pdf'
) end of look-ahead
答案 3 :(得分:0)
怎么样:
/^(.*_)[^_]+(\.pdf)$/$1somethingelse$2/
答案 4 :(得分:0)
z = "name date _ uniqueid.pdf"
z2 = "somethingelse"
z.gsub(/(.*_\s*)[^_.]*(.[a-zA-Z0-9]*$)/,'\1'+z2+'\2')