【发布时间】:2021-05-18 20:52:37
【问题描述】:
很长一段时间以来,我一直在尝试为这个问题找出一个正则表达式,但没有成功,所以我正在寻求一些帮助。 我创建了一个正则表达式,当它们出现在电子邮件中时,它将捕获特定的数字字符串。问题在于,当它们位于 URL 中时,它还会捕获这些特定的数字字符串。 URL 是随机生成的,而且很多时候,它们包含一串与我的正则表达式匹配的数字。我一直在尝试创建一个正则表达式,它仍将捕获特定的数字字符串,但当它位于 URL 内但没有运气时会忽略该字符串。这是我一直在使用的正则表达式的示例。
(?:700[0-9][0-9]{7}|81[0-9][0-9][0-9]{5}|9999[0-9]{8})\b
这是一个包含特定字符串的电子邮件示例。
mailto:发件人:发送时间:2021 年 5 月 17 日星期一上午 11:42 收件人:700000000。如果收到” 检测到:外部收件人,
https://test.test.test.outlook.com/?url=bunchofrandomstuffthatdoesnotmatterF&data=sfsfsdagfd4454366474retre45435700000000%7CRegex%randomthingsoiMC4wLjAwnotareallink2luMzIiLCJBTiIjfsdkljafdslflsdkajfljie
问题在于它捕获了构成 URL 的文本中的数字和 mailto 行中的数字。如果可能的话,我需要一个正则表达式来捕获满足电子邮件中任何地方正则表达式条件的数字字符串,除非它位于 URL 内。
我已经尝试了以下
(?:700[0-9][0-9]{7}|81[0-9][0-9][0-9]{5}|9999[0-9]{8} )\b(?:(?!https://test.test.test.outlook.com).)
它也不起作用。有什么想法吗?
【问题讨论】:
-
试试这个
https?://\S*(?:700[0-9][0-9]{7}|81[0-9][0-9][0-9]{5}|9999[0-9]{8})\b(*SKIP)(*F)|(?:700[0-9][0-9]{7}|81[0-9][0-9][0-9]{5}|9999[0-9]{8})\bregex101.com/r/rv29Tt/1 -
非常感谢。这比我一直在努力做的要好得多。唯一的事情是,当我尝试将其复制到新的 regex101 中时,它抱怨 / 说必须用反斜杠转义未转义的定界符。我不知道为什么,因为我已尽力使所有设置都相同。
-
在代码中解决了吗?在左上角的 regex101 上,您可以将分隔符更改为
/以外的其他分隔符您也可以转义正斜杠,如 regex101.com/r/VzCe9b/1 -
是的,代码有效,我想考虑回答这个问题。感谢您的帮助。你如何回答这个问题。
-
如果您想接受答案,可以点击答案左侧的✓。