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

时间:2022-07-26 18:50:46
想用正则表达式类实现字符串的替换功能。字符串中可能存在中括号,位置不定。要求把它当普通字符处理。

20 个解决方案

#1


加\


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

#2


重新描述一下问题:
用正则表达式类实现文件名字符串替换代码(用新字符串替换旧文件名中指定的部分),文件名中存在正则表达式中的功能字符,如何在做替换时排除这些(存在于文件名字符串中的)功能字符的干扰?

#3


不要中括号了?

#4


你举例....

比你描述简单

#5


TO:#1楼
加了@后使\失效,个人理解:string pstr = @"[\[\]\(\)]+";的功能为:
匹配"\[\]\(\)"这个字符串出现1次或多次的字符串。

#6


TO:#3楼,#4楼
举例:
文件:[人人影视][迷失.Lost]][S04E01].rmvb
[人人影视][迷失.Lost]][S04E02].rmvb
。。。
[人人影视][迷失.Lost]][S04E12].rmvb

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

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

另外:考虑到文件名中还可包含其它字符,如:(),+,...,要把所有这些正则表达式中的功能字符(串)都考虑进去。

#7


新文件名=Regex.Replace(原文件名, @"\[人人影视\]", "")

#8


原文件名中有什么字符根本不用去考虑,只在乎于正则

#9


还有你这个功能直接可以用
新文件名=原文件名.Replace("[人人影视]","");

#10


TO:#7楼
新文件名=Regex.Replace(原文件名, @"\[人人影视\]", "")
-------------------
"["位置不定。如果文件名换成:[迷失.Lost]][人人影视][S04E01].rmvb
或:[迷失.Lost]][人人影视RRYS][S04E01].rmvb
代码就失效。

#11


TO:#8楼
原文件名中有什么字符根本不用去考虑,只在乎于正则
-------------
正是想求这样与字符串无关的正则
TO:#9楼
参照#10楼
之所以没有用字符串类的Replace,是因为在程序中还要用到正则

#12


新文件名=Regex.Replace(原文件名, @"\[[^\]]*人人影视[^\]]*\]", "")

#13


请问:字符串类的Replace可以不区分大小写吗?

#14


该回复于2011-02-19 11:23:30被版主删除

#15


TO:#12楼
新文件名=Regex.Replace(原文件名, @"\[[^\]]*人人影视[^\]]*\]", "")
-------------------
如果文件名换成:[迷失.Lost](人人影视)[S04E01].rmvb,或者[迷失.Lost]+人人影视+[S04E01].rmvb呢?

看来还是得分情况讨论啊,这里用字符串类的Replace,需要用正则时再用正则,多写一些代码。
只是现在不知道字符串类的Replace如何设置不区分大小写匹配。

#16


@"[\[\(\+][^\]\)\+]*人人影视[^\]\)\+]*[\]\)\+]"

#17


TO:#16楼
"[\[\(\+][^\]\)\+]*人人影视[^\]\)\+]*[\]\)\+]"
------------------
文件名为:[迷失.Lost]+人人影视[S04E01].rmvb
失效

#18


@"[\[\(\+]?[^\]\)\+]*人人影视[^\]\)\+]*[\]\)\+]?"

还有失效的话你自己解决吧。。。

#19


该回复于2011-02-21 10:24:47被版主删除

#20


to:#18楼
字符串:[迷失.Lost]+人人影视[S04E01].rmvb
[\[\(\+]?[^\]\)\+]*人人影视[^\]\)\+]*[\]\)\+]?
匹配的是: +人人影视[S04E01]
所以仍然失效。

#1


加\


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

#2


重新描述一下问题:
用正则表达式类实现文件名字符串替换代码(用新字符串替换旧文件名中指定的部分),文件名中存在正则表达式中的功能字符,如何在做替换时排除这些(存在于文件名字符串中的)功能字符的干扰?

#3


不要中括号了?

#4


你举例....

比你描述简单

#5


TO:#1楼
加了@后使\失效,个人理解:string pstr = @"[\[\]\(\)]+";的功能为:
匹配"\[\]\(\)"这个字符串出现1次或多次的字符串。

#6


TO:#3楼,#4楼
举例:
文件:[人人影视][迷失.Lost]][S04E01].rmvb
[人人影视][迷失.Lost]][S04E02].rmvb
。。。
[人人影视][迷失.Lost]][S04E12].rmvb

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

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

另外:考虑到文件名中还可包含其它字符,如:(),+,...,要把所有这些正则表达式中的功能字符(串)都考虑进去。

#7


新文件名=Regex.Replace(原文件名, @"\[人人影视\]", "")

#8


原文件名中有什么字符根本不用去考虑,只在乎于正则

#9


还有你这个功能直接可以用
新文件名=原文件名.Replace("[人人影视]","");

#10


TO:#7楼
新文件名=Regex.Replace(原文件名, @"\[人人影视\]", "")
-------------------
"["位置不定。如果文件名换成:[迷失.Lost]][人人影视][S04E01].rmvb
或:[迷失.Lost]][人人影视RRYS][S04E01].rmvb
代码就失效。

#11


TO:#8楼
原文件名中有什么字符根本不用去考虑,只在乎于正则
-------------
正是想求这样与字符串无关的正则
TO:#9楼
参照#10楼
之所以没有用字符串类的Replace,是因为在程序中还要用到正则

#12


新文件名=Regex.Replace(原文件名, @"\[[^\]]*人人影视[^\]]*\]", "")

#13


请问:字符串类的Replace可以不区分大小写吗?

#14


该回复于2011-02-19 11:23:30被版主删除

#15


TO:#12楼
新文件名=Regex.Replace(原文件名, @"\[[^\]]*人人影视[^\]]*\]", "")
-------------------
如果文件名换成:[迷失.Lost](人人影视)[S04E01].rmvb,或者[迷失.Lost]+人人影视+[S04E01].rmvb呢?

看来还是得分情况讨论啊,这里用字符串类的Replace,需要用正则时再用正则,多写一些代码。
只是现在不知道字符串类的Replace如何设置不区分大小写匹配。

#16


@"[\[\(\+][^\]\)\+]*人人影视[^\]\)\+]*[\]\)\+]"

#17


TO:#16楼
"[\[\(\+][^\]\)\+]*人人影视[^\]\)\+]*[\]\)\+]"
------------------
文件名为:[迷失.Lost]+人人影视[S04E01].rmvb
失效

#18


@"[\[\(\+]?[^\]\)\+]*人人影视[^\]\)\+]*[\]\)\+]?"

还有失效的话你自己解决吧。。。

#19


该回复于2011-02-21 10:24:47被版主删除

#20


to:#18楼
字符串:[迷失.Lost]+人人影视[S04E01].rmvb
[\[\(\+]?[^\]\)\+]*人人影视[^\]\)\+]*[\]\)\+]?
匹配的是: +人人影视[S04E01]
所以仍然失效。

#21