Regex 对电子邮件排序:按每封电子邮件的第一次出现通过列表

Regex 对电子邮件排序:按每封电子邮件的第一次出现通过列表,regex,sorting,Regex,Sorting,我想排序电子邮件:密码的第一次出现的每封电子邮件 示例列表: email@example.com:passsword1 email@example.com:passsword2 email@example.com:passsword3 email1@example.com:passsword1 email1@example.com:passsword2 email1@example.com:passsword2 仅此而已 email@example.com:passsword1 email1@

我想排序电子邮件:密码的第一次出现的每封电子邮件

示例列表:

email@example.com:passsword1
email@example.com:passsword2
email@example.com:passsword3
email1@example.com:passsword1
email1@example.com:passsword2
email1@example.com:passsword2
仅此而已

email@example.com:passsword1
email1@example.com:passsword1
因此,应保留

用我有限的正则表达式技能,我算出了这个,但我想我误解了一些东西:

^(.*)(\r?\n\1)+(?=:)
使用

^((.*:).*)(?:\r?\n\2.*)+
请参阅,使用
g
m
标志

解释

--------------------------------------------------------------------------------
^字符串的开头
--------------------------------------------------------------------------------
(组和捕获到\1:
--------------------------------------------------------------------------------
(分组并捕获到\2:
--------------------------------------------------------------------------------
.*除\n(0或更多)以外的任何字符
次数(与最大金额匹配)
(可能的)
--------------------------------------------------------------------------------
:                        ':'
--------------------------------------------------------------------------------
)结束\2
--------------------------------------------------------------------------------
.*除\n(0次或多次)以外的任何字符
(匹配尽可能多的金额)
--------------------------------------------------------------------------------
)结束\1
--------------------------------------------------------------------------------
(?:组,但不捕获(1次或多次)
(匹配尽可能多的金额):
--------------------------------------------------------------------------------
\r?'\r'(回车)(可选)
(匹配尽可能多的金额)
--------------------------------------------------------------------------------
\n'\n'(换行符)
--------------------------------------------------------------------------------
\2与捕获匹配的内容\2
--------------------------------------------------------------------------------
.*除\n(0次或多次)以外的任何字符
(匹配尽可能多的金额)
--------------------------------------------------------------------------------
)+分组结束
使用

^((.*:).*)(?:\r?\n\2.*)+
请参阅,使用
g
m
标志

解释

--------------------------------------------------------------------------------
^字符串的开头
--------------------------------------------------------------------------------
(组和捕获到\1:
--------------------------------------------------------------------------------
(分组并捕获到\2:
--------------------------------------------------------------------------------
.*除\n(0或更多)以外的任何字符
次数(与最大金额匹配)
(可能的)
--------------------------------------------------------------------------------
:                        ':'
--------------------------------------------------------------------------------
)结束\2
--------------------------------------------------------------------------------
.*除\n(0次或多次)以外的任何字符
(匹配尽可能多的金额)
--------------------------------------------------------------------------------
)结束\1
--------------------------------------------------------------------------------
(?:组,但不捕获(1次或多次)
(匹配尽可能多的金额):
--------------------------------------------------------------------------------
\r?'\r'(回车)(可选)
(匹配尽可能多的金额)
--------------------------------------------------------------------------------
\n'\n'(换行符)
--------------------------------------------------------------------------------
\2与捕获匹配的内容\2
--------------------------------------------------------------------------------
.*除\n(0次或多次)以外的任何字符
(匹配尽可能多的金额)
--------------------------------------------------------------------------------
)+分组结束

使用regex进行此操作简直是疯了。如果下面的答案证明对您有帮助(请参阅),请参见,因为您在达到15个代表点后有权获得向上投票特权。请注意,您现在可以对所有有帮助的答案进行投票。使用regex进行投票是疯狂的。如果下面的答案证明对您有帮助(请参阅),请同时确认,因为您在达到15个代表点后有权获得投票权。请注意,您现在可以投票选出所有有帮助的答案。