正则问题

fuda_1985 2010-11-05 12:28:04
Regex re = new Regex("^{(\\w|\\W)?Id=(\\w|\\W)?(,|})$",RegexOptions.IgnoreCase);
string aa = "{ Id = 1a213baa-cac8-48d7-94a9-02cb55c312bd, Description = asdasddsffsdf, ItemNo = ItemNo3, BranchName = 228J0P, UM = UM, ABCCode = DDDDD, GLClass = GL002, CyclCountCategory = Phical cout, SupplierName = SUPPLIER3, Planner = PLANNER2, IssueType = , IssueMethod = FromBin, ReplenishQty = 3000, ShelfDays = 222, ReminderDays = 77777, LocationType = RFD, SupplierCode = SUPPLIER3, IsTracebility = False }";

string bb = aa.Replace(" ", "");
bool b = re.IsMatch(bb);

我要查找Id = 1a213baa-cac8-48d7-94a9-02cb55c312bd这个字符串,不知道为什么我写的正则找不出来。。
...全文
118 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
fuda_1985 2010-11-05
  • 打赏
  • 举报
回复
好久没写正则了,真是忘得快!
fuda_1985 2010-11-05
  • 打赏
  • 举报
回复
昨天为了别人的项目搞了一晚上,在别人写的基础上改BUG,发现用正则做就行,结果把*写成了?。。

太杯具了。学了一课,我用replace替换的空格~还不知道空格可以这么换掉呢。
fuda_1985 2010-11-05
  • 打赏
  • 举报
回复
哎,糊途了,把*写成?真是杯具。。
huangwenquan123 2010-11-05
  • 打赏
  • 举报
回复
UP 又上了一堂课!
兔子-顾问 2010-11-05
  • 打赏
  • 举报
回复
总结规律比写正则要重要。关键是弄清你要匹配的是什么,规律是什么。
John1CSDN 2010-11-05
  • 打赏
  • 举报
回复
@"\s{8}-\s{4}-\s{4}-\s{4}-\s{12}"
bourbon1795 2010-11-05
  • 打赏
  • 举报
回复
写错了,只写[^\s]的话
bourbon1795 2010-11-05
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 jinkuang45 的回复:]

C# code

Regex reg = new Regex(@"(?i)id\s*=\s*[^\s,}]+");
//过客大哥 这个[^\s,}] 只不匹配 ,号不就可以么 为什么还要有\s和}啊!!!
[/Quote]
占有优先量词会尽可能多的匹配,比如.*会一直匹配都结尾,然后再根据后面的表达式进行回溯。

只写[^\s,}]话,匹配的应该是
Id = 1a213baa-cac8-48d7-94a9-02cb55c312bd, Description = asdasddsffsdf, ItemNo = ItemNo3, BranchName = 228J0P, UM = UM, ABCCode = DDDDD, GLClass = GL002, CyclCountCategory = Phical cout, SupplierName = SUPPLIER3, Planner = PLANNER2, IssueType = , IssueMethod = FromBin, ReplenishQty = 3000, ShelfDays = 222, ReminderDays = 77777, LocationType = RFD, SupplierCode = SUPPLIER3, IsTracebility = False }
冰川711 2010-11-05
  • 打赏
  • 举报
回复
昂!! 深谋远虑! 佩服!!!
-过客- 2010-11-05
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 jinkuang45 的回复:]
C# code

Regex reg = new Regex(@"(?i)id\s*=\s*[^\s,}]+");
//过客大哥 这个[^\s,}] 只不匹配 ,号不就可以么 为什么还要有\s和}啊!!!
[/Quote]

这个主要根据楼主的需求和源字符串的特点来定了
因为源字符串中这个子串和“,”之间出现空格也是合理的,所以[^...]中要排除空白字符
另外看楼主正则的考虑,这个子串有可能出现在{...}最后,所以[^...]中要排除“}”
冰川711 2010-11-05
  • 打赏
  • 举报
回复

Regex reg = new Regex(@"(?i)id\s*=\s*[^\s,}]+");
//过客大哥 这个[^\s,}] 只不匹配 ,号不就可以么 为什么还要有\s和}啊!!!
q107770540 2010-11-05
  • 打赏
  • 举报
回复
过客V5
学习。。
-过客- 2010-11-05
  • 打赏
  • 举报
回复
^ 匹配字符串的开始位置
$ 匹配字符串的结束位置
楼主的需求是在字符串中提取某一子串,所以通常情况下不需要加这两个限定符,除非明确要求就是开始位置或结束位置的子串,才加其中的一个限定符

另外,楼主对于量词的运用还是很清楚
? 相当于{0,1},表示匹配0次或1次,也就是可有可无,但最多只匹配一次,所以楼主的正则,最多可以匹配7个字符,当然不会有结果了

(\w|\W) 这种方式在表示匹配任意字符时,效率没有字符组[\w\W]的效率高,而表示任意字符效率最高的是(?i)加小数点
-过客- 2010-11-05
  • 打赏
  • 举报
回复
string aa = "{ Id = 1a213baa-cac8-48d7-94a9-02cb55c312bd, Description = asdasddsffsdf, ItemNo = ItemNo3, BranchName = 228J0P, UM = UM, ABCCode = DDDDD, GLClass = GL002, CyclCountCategory = Phical cout, SupplierName = SUPPLIER3, Planner = PLANNER2, IssueType = , IssueMethod = FromBin, ReplenishQty = 3000, ShelfDays = 222, ReminderDays = 77777, LocationType = RFD, SupplierCode = SUPPLIER3, IsTracebility = False }";
Regex reg = new Regex(@"(?i)id\s*=\s*[^\s,}]+");
Match m = reg.Match(aa);
if (m.Success)
{
richTextBox2.Text = m.Value;
}
/*--------输出--------
Id = 1a213baa-cac8-48d7-94a9-02cb55c312bd
*/

62,047

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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