正则表达式:在下划线后替换所有内容

时间:2011-03-30 19:15:50

标签: regex

文件命名为

name date _ uniqueid.pdf

结果应该是

name date _ somethingelse.pdf

我将使用查找/替换,所以不要担心替换部分。我只想搜索匹配下划线。

这不适用于c#.net,它适用于在另一个接受正则表达式的程序中查找和替换。

我真的很抱歉我应该提到这一点。没有语言,只有普通的正则表达式。即。 /[^_].*

谢谢!

5 个答案:

答案 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)

Ruby中的

z = "name date _ uniqueid.pdf"

z2 = "somethingelse"

z.gsub(/(.*_\s*)[^_.]*(.[a-zA-Z0-9]*$)/,'\1'+z2+'\2')