仅当字符出现在特定数量的字符之后时,正则表达式才能删除某个字符后的所有内容

时间:2015-02-18 15:40:48

标签: regex string character

我正在寻找一个简单的正则表达式,

示例1:

n = 5

Input: abcde@varun@gmail.com

Output: abcde@varun

示例2:

n = 5

Input: abcd@varun@gmail.com

Output: abcd@varun@gmail.com 

这意味着如果n = 5并且符号 @ 在第5个索引之前或之前出现 NOT (假设字符串从索引1开始),则删除所有第二次出现 @ 后的所有内容(包括@符号)。

如果不满足上述规则,请将字符串保留原样。

谢谢Varun。

2 个答案:

答案 0 :(得分:2)

您可以使用此正则表达式捕获您希望保留到第一组中的部分:

(^[^@]{5,}@[^@]*)@

表达式匹配一个至少有两个@符号的字符串,第一个@不在最初的五个字符内。

这会捕获abcde@varun,但不会捕获abcd@varun,因为@出现在最初的五个字符内。

Demo.

5替换为n以根据需要更改前缀的长度。

答案 1 :(得分:1)

^(?!(?:@|.@|.{2}@|.{3}@|.{4}@))(.*?@.*?)@.*$

试试这个。$1。见。演示。

https://regex101.com/r/uC8uO6/7