正则表达式组/替换问题

时间:2019-12-09 17:59:46

标签: regex

我有以下两个正则表达式。我的目标是提取“ EX”之后的所有内容

示例1:

(^[EX]{2})(\w+)

示例数据

EX12456

https://regex101.com/r/6QqHwf/13

匹配信息显示第2组是我想要的数据,并且与替换$ 2匹配。

示例2:

(?<=EX)(?s)(.*$)

示例数据

123456/stackoverflo@|EX789

https://regex101.com/r/6QqHwf/12

匹配信息显示第1组是我想要的数据,但与替换$ 1不匹配。

如何将日期“ 789”添加/替换到替代品中?谢谢!!!

2 个答案:

答案 0 :(得分:2)

“替代”删除匹配的内容,并忽略剩下的内容。您原来的正则表达式将匹配EX并允许将其删除,但是第二个正则表达式不匹配123456/stackoverflo@|EX,因此不会将其删除。请尝试使用.*(?<=EX)(?s)(.*$)-与字符串的第一部分匹配,然后将其删除。

请注意,.*与整个字符串匹配-但是,(<=EX)之后的后缀会强制其放弃部分匹配,以满足约束条件。 (.*的意思是“除换行符外的其他任何字符,重复零次或多次。”

Demo

答案 1 :(得分:2)

如果要提取EX之后的所有内容,则不必使用任何捕获组,而可以使用positive lookbehind (?<=

请注意[EX]character class,它将与E或X匹配

(?<=EX).*

Regex demo

在第二种模式中,只有一个匹配是组1。如果用组1替换,则最终将以相同的起始值结束。

如果仅出现EX,您可以做的是匹配它并在替换中使用组1(例如$1),这样匹配就不会成为结果的一部分

^.*EX(.*$)

Regex demo