当前位置:  开发笔记 > 编程语言 > 正文

只返回正则表达式的部分匹配

如何解决《只返回正则表达式的部分匹配》经验,为你挑选了2个好方法。

假设我有一个字符串"User Name:firstname.surname"包含在一个更大的字符串中,我如何使用正则表达式来获取firstname.surname部分?

我尝试过的每个方法都返回字符串"User Name:firstname.surname",然后我必须在"User Name:"上将字符串替换为空字符串.

可以在这里使用引用吗?

编辑:

较长的字符串可能包含"帐户名称:firstname.surname",因此我想要匹配字符串的"用户名:"部分以及获取该值.



1> Daniel LeChe..:

我喜欢使用命名组:

Match m = Regex.Match("User Name:first.sur", @"User Name:(?\w+\.\w+)");
if(m.Success)
{
   string name = m.Groups["name"].Value;
}

?括号中的组的开头放在括号中(例如(?...))允许您使用something键作为键从匹配中获取值(例如,从m.Groups["something"].Value)

如果你不想麻烦地命名你的小组,你可以说

Match m = Regex.Match("User Name:first.sur", @"User Name:(\w+\.\w+)");
if(m.Success)
{
   string name = m.Groups[1].Value;
}

并得到第一个匹配的东西.(请注意,第一个带括号的组在索引处1;匹配的整个表达式在索引处0)



2> 小智..:

您还可以尝试"环视"的概念.这是一种零宽度断言,意味着它将匹配字符,但不会在结果中捕获它们.

在你的情况下,我们可以采取积极的观察:我们希望目标字符串"firstname.surname"背后的内容等于"用户名:".

正面lookbehind运算符:(?<= StringBehind)StringWeWant

这可以像这样实现,例如(一个小Java示例,使用字符串替换):

String test = "Account Name: firstname.surname; User Name:firstname.surname";
String regex = "(?<=User Name:)firstname.surname";
String replacement = "James.Bond";
System.out.println(test.replaceAll(regex, replacement));

这将仅替换"用户名:"前面的"firstname.surname"字符串,而不替换"用户名:"本身 - 正则表达式不返回,仅匹配.

输出:帐户名称:firstname.surname; 用户名:James.Bond

也就是说,如果您使用的语言支持这种操作

推荐阅读
135369一生真爱_890
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有