正则表达式匹配

鸭梨山大帝 2012-11-14 01:54:58
问一个正则表达式的问题.
例如有一段文字里面包含了:

我的书包
我的蓝色书包
我的蓝色新潮书包
我的桌子
我的蓝色桌子
我的蓝色新潮桌子

其中书包/桌子一词可能是任何词汇.

我的
我的蓝色
我的蓝色新潮
这三个句子是固定的
(简化问题,暂时设定其固定,实际情况比较复杂,可能是 (他的,你的,大家的)/(红色,紫色,白色,粉红色)/(新潮,老旧,破旧,麻布,帆布,皮革,人造革) XX(书包/桌子/柜子/房子等等)

此时,三个句子固定,怎么用正则抓出 书包/桌子 一词 ?

这样:
(?is)(?<=我的|我的蓝色|我的蓝色新潮)\S+
会匹配出不需要的内容:
书包
蓝色书包
蓝色新潮书包
桌子
蓝色桌子
蓝色新潮桌子


...全文
140 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
XBodhi. 2012-11-14
  • 打赏
  • 举报
回复
^[我的].*[书包]$
鸭梨山大帝 2012-11-14
  • 打赏
  • 举报
回复
感谢两位. 1楼的代码使用了非回溯子表达式(贪婪子表达式),两个分组,取第二个分组的资料 2楼使用了零宽度正回顾后发断言(正回顾),五个分组,直接取第一个分组的资料.
q107770540 2012-11-14
  • 打赏
  • 举报
回复
(?<=我的(蓝色)?(新潮)?)((?!(蓝色|新潮)).)+
  • 打赏
  • 举报
回复
string str = @"我的书包
我的蓝色书包
我的蓝色新潮书包
我的桌子
我的蓝色桌子
我的蓝色新潮桌子

";
                List<string> list = Regex.Matches(str, @"(?>我的蓝色新潮|我的蓝色|我的)(\S+)").Cast<Match>().Select(a => a.Groups[1].Value).ToList();
                /*
                 		[0]	"书包"	string
		                [1]	"书包"	string
		                [2]	"书包"	string
		                [3]	"桌子"	string
		                [4]	"桌子"	string
		                [5]	"桌子"	string

                 */
                //如果想去除重复,那么,可以Distinct
                list = Regex.Matches(str, @"(?>我的蓝色新潮|我的蓝色|我的)(\S+)").Cast<Match>().Select(a => a.Groups[1].Value).Distinct().ToList();
                /*
                 		[0]	"书包"	string
		                [1]	"桌子"	string
 
                 */

111,092

社区成员

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

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

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