正则表达式处理字符串,如何把字符串中的中括号当普通字符处理。

ltolll 2011-02-19 10:11:04
想用正则表达式类实现字符串的替换功能。字符串中可能存在中括号,位置不定。要求把它当普通字符处理。
...全文
609 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
ltolll 2011-02-19
  • 打赏
  • 举报
回复
to:#18楼
字符串:[迷失.Lost]+人人影视[S04E01].rmvb
[\[\(\+]?[^\]\)\+]*人人影视[^\]\)\+]*[\]\)\+]?
匹配的是: +人人影视[S04E01]
所以仍然失效。
sprc_lcl 2011-02-19
  • 打赏
  • 举报
回复
@"[\[\(\+]?[^\]\)\+]*人人影视[^\]\)\+]*[\]\)\+]?"

还有失效的话你自己解决吧。。。
ltolll 2011-02-19
  • 打赏
  • 举报
回复
TO:#16楼
"[\[\(\+][^\]\)\+]*人人影视[^\]\)\+]*[\]\)\+]"
------------------
文件名为:[迷失.Lost]+人人影视[S04E01].rmvb
失效
sprc_lcl 2011-02-19
  • 打赏
  • 举报
回复
@"[\[\(\+][^\]\)\+]*人人影视[^\]\)\+]*[\]\)\+]"
ltolll 2011-02-19
  • 打赏
  • 举报
回复
TO:#12楼
新文件名=Regex.Replace(原文件名, @"\[[^\]]*人人影视[^\]]*\]", "")
-------------------
如果文件名换成:[迷失.Lost](人人影视)[S04E01].rmvb,或者[迷失.Lost]+人人影视+[S04E01].rmvb呢?

看来还是得分情况讨论啊,这里用字符串类的Replace,需要用正则时再用正则,多写一些代码。
只是现在不知道字符串类的Replace如何设置不区分大小写匹配。
ltolll 2011-02-19
  • 打赏
  • 举报
回复
请问:字符串类的Replace可以不区分大小写吗?
sprc_lcl 2011-02-19
  • 打赏
  • 举报
回复
新文件名=Regex.Replace(原文件名, @"\[[^\]]*人人影视[^\]]*\]", "")
ltolll 2011-02-19
  • 打赏
  • 举报
回复
TO:#8楼
原文件名中有什么字符根本不用去考虑,只在乎于正则
-------------
正是想求这样与字符串无关的正则
TO:#9楼
参照#10楼
之所以没有用字符串类的Replace,是因为在程序中还要用到正则
ltolll 2011-02-19
  • 打赏
  • 举报
回复
TO:#7楼
新文件名=Regex.Replace(原文件名, @"\[人人影视\]", "")
-------------------
"["位置不定。如果文件名换成:[迷失.Lost]][人人影视][S04E01].rmvb
或:[迷失.Lost]][人人影视RRYS][S04E01].rmvb
代码就失效。
sprc_lcl 2011-02-19
  • 打赏
  • 举报
回复
还有你这个功能直接可以用
新文件名=原文件名.Replace("[人人影视]","");
sprc_lcl 2011-02-19
  • 打赏
  • 举报
回复
原文件名中有什么字符根本不用去考虑,只在乎于正则
sprc_lcl 2011-02-19
  • 打赏
  • 举报
回复
[code=C]新文件名=Regex.Replace(原文件名, @"\[人人影视\]", "")[/code]
ltolll 2011-02-19
  • 打赏
  • 举报
回复
TO:#3楼,#4楼
举例:
文件:[人人影视][迷失.Lost]][S04E01].rmvb
[人人影视][迷失.Lost]][S04E02].rmvb
。。。
[人人影视][迷失.Lost]][S04E12].rmvb

用一个循环改文件名。去掉文件名中的“[人人影视]”。
替换语句为:
新文件名=Regex.Replace(原文件名,"[人人影视]" , "", RegexOptions.IgnoreCase);

现在的结果是:新文件名=[][迷失.Lost]][S04E01].rmvb
与想要的结果新文件名=[迷失.Lost]][S04E01].rmvb不符

另外:考虑到文件名中还可包含其它字符,如:(),+,...,要把所有这些正则表达式中的功能字符(串)都考虑进去。
ltolll 2011-02-19
  • 打赏
  • 举报
回复
TO:#1楼
加了@后使\失效,个人理解:string pstr = @"[\[\]\(\)]+";的功能为:
匹配"\[\]\(\)"这个字符串出现1次或多次的字符串。
sprc_lcl 2011-02-19
  • 打赏
  • 举报
回复
你举例....

比你描述简单
mayuliuze 2011-02-19
  • 打赏
  • 举报
回复
不要中括号了?
ltolll 2011-02-19
  • 打赏
  • 举报
回复
重新描述一下问题:
用正则表达式类实现文件名字符串替换代码(用新字符串替换旧文件名中指定的部分),文件名中存在正则表达式中的功能字符,如何在做替换时排除这些(存在于文件名字符串中的)功能字符的干扰?
sprc_lcl 2011-02-19
  • 打赏
  • 举报
回复
加\


string str = "[[[[[]]]]()()(";
string pstr = @"[\[\]\(\)]+";

110,526

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧