Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在嵌套的括号和方括号内正确转义?_Python_Regex_Email - Fatal编程技术网

Python 如何在嵌套的括号和方括号内正确转义?

Python 如何在嵌套的括号和方括号内正确转义?,python,regex,email,Python,Regex,Email,我从来没有想过我需要正则表达式方面的帮助,但这里有: 我正在寻找用于解析电子邮件地址的单个正则表达式: someone@example.com→ {“姓名”:“电子邮件”:someone@example.com“} 某个人→ {“姓名”:“某人”,“电子邮件”:someone@example.com“} regex必须生成两个组:name和email 这是我目前的状态: regex=r“^(?p[^(\s+\?$) 我绝对肯定我需要转义第一个嵌套块中的某些内容,因为这是一个实际结果: {'

我从来没有想过我需要正则表达式方面的帮助,但这里有:

我正在寻找用于解析电子邮件地址的单个正则表达式:

  • someone@example.com
    → <代码>{“姓名”:“电子邮件”:someone@example.com“}
  • 某个人
    → <代码>{“姓名”:“某人”,“电子邮件”:someone@example.com“}
regex必须生成两个组:name和email

这是我目前的状态:

regex=r“^(?p[^(\s+\?$)

我绝对肯定我需要转义第一个嵌套块中的某些内容,因为这是一个实际结果:


{'email':'someone这里有一个答案,持续了几秒钟(然后OP删除了它),里面有答案:

您需要双倍转义

regex = r"^((?P<name>[^(\\s+\<)]*)\s+<)?(?P<email>[^@]+?@[^>]+)>?$"
                        ↑   ↑
regex=r“^(?P[^(\\s+\?$)
↑   ↑
编辑:报价→ 逃脱

编辑2:
这个正则表达式工作得更好:

r'^\s*(?P<name>[^\s<>](?:.*?[^\s<>])?)??\s*<?(?P<email>[^<>@\s]+@[^<>@\s]+)>?$'‌​
r'^\s*(?P[^\s](?:*?[^\s])?\s*

“正则”表达式之所以被称为正则表达式,是因为它们指定了所谓的“正则语言”。这类语言的特点是上下文无关的规则;例如,“bow”一词只表示一件事,而不管它周围是什么词(假设它是“狗说什么”的关键字)。这与上下文相关语言不同,“我在你面前鞠躬”中的“鞠躬”不同于“用鞠躬射击”,后者不同于“鞠躬哇”

现代正则表达式在某种程度上超越了这一定义,但是,RFC822中定义的
From:
头语法太复杂,即使是经过增强的正则表达式引擎也无法解析。您确实需要上下文相关的语法(实际上,RFC5322包括一种)完全解析规范允许的每个可能的变体。要连接到上一个示例,
\“
的意思(即,应该如何解析)取决于您是否在双引号内,以及您是否在查看“真实姓名”、电子邮件终端或注释(在括号中)

现在,您可能想退后一步,说只有一些可能的变体实际上是通用的、广泛使用的;这是真的,有一些正则表达式可以处理几乎所有的变体


在的测试套件上尝试正则表达式,并自行决定哪些测试失败对您来说真正重要。也许您可以为您“真正的意思”提出一个好的规范。但您的问题,就目前而言,必须以响亮的“无法完成”来回答“

可能重复@spoticouscompiler它不是一个重复;我对
[^@]没意见。”+@.+
在我看来,不管怎样,这个问题都不太可能对未来的SO用户有所帮助。这个问题可能是因为正则表达式中的拼写错误而寻求帮助,这对未来的搜索者来说不太可能有帮助,或者这个问题是在寻找权威的“如何将regexp与电子邮件地址匹配”这在dupe链接中得到了回答。我认为这对未来的读者很有帮助,因为它实际上是关于在嵌套的括号和括号中引用;实际上不可能将电子邮件地址与正则表达式相匹配。请参阅,这指定了一个字符类,该类与一个字符相匹配,而该字符不是圆括号、文字反斜杠和字符
s
,字符
+
,字符
@tripleee这很有趣;在python中,regex
[^()]*
匹配字符,直到括号中的子模式匹配为止(解释左括号)无论如何,这在
Lastname First
上都会失败,虽然没有真实姓名,但在电子邮件终端附近中断了。在
First-Middle-Last
gregoris
上也会失败。如果我能理解你在尝试什么,我猜
r'^\s*(?P[^\s](?:.[^\s]))??\s*我已经清楚地提供了输入和预期输出。我不是在寻找用于解析电子邮件地址的正则表达式。我已经有了这些。我只需要提取名称和电子邮件。你没有意义。确定输入字符串的哪一部分是名称,哪一部分是电子邮件地址就是解析的意思。如果你已经解决了这个问题,你为什么这么问?因为我还不能接受我自己的答案(我的原始帖子已经包含了指向解决方案的链接和“已解决”一词),这仍然没有意义。你的问题是“我正在寻找一个用于解析电子邮件地址的正则表达式”现在你说你不是?为了娱乐,包含一个简单的验证脚本,它使用上面URL中的测试用例。