Python中特定格式的字符串正则表达式

Python中特定格式的字符串正则表达式,python,python-3.x,Python,Python 3.x,我有以下格式的字符串name1。如何使用正则表达式只提取name1部分? 另外,如果我有多个这样的名字和电子邮件,比如说name1,name2,我怎么能做到这一点呢?尝试使用split: In [164]: s = 'name1 <email1@email.com>, name2 <email2@email.com>' In [166]: [i.split()[0] for i in s.split(',')] Out[166]: ['name1', 'name2']

我有以下格式的字符串
name1
。如何使用正则表达式只提取name1部分?
另外,如果我有多个这样的名字和电子邮件,比如说
name1,name2
,我怎么能做到这一点呢?

尝试使用
split

In [164]: s = 'name1 <email1@email.com>, name2 <email2@email.com>'
In [166]: [i.split()[0] for i in s.split(',')]
Out[166]: ['name1', 'name2']
[164]中的
s='name1,name2'
在[166]中:[i.split()[0]用于s.split(',')中的i]
Out[166]:['name1','name2']
如果您只有一个名字:

In [161]: s = 'name1 <email1@email.com>'
In [163]: s.split()[0]
Out[163]: 'name1'
[161]中的
:s='name1'
在[163]中:s.split()[0]
Out[163]:“name1”

尝试使用
拆分

In [164]: s = 'name1 <email1@email.com>, name2 <email2@email.com>'
In [166]: [i.split()[0] for i in s.split(',')]
Out[166]: ['name1', 'name2']
[164]中的
s='name1,name2'
在[166]中:[i.split()[0]用于s.split(',')中的i]
Out[166]:['name1','name2']
如果您只有一个名字:

In [161]: s = 'name1 <email1@email.com>'
In [163]: s.split()[0]
Out[163]: 'name1'
[161]中的
:s='name1'
在[163]中:s.split()[0]
Out[163]:“name1”
您可以从
(\w+)\s(?,\s)?
(请参见上)开始,这取决于电子邮件被
包围的事实,并根据需要对其进行自定义

注意此正则表达式不专门查找电子邮件,只查找由
包围的文本

不要摔倒

您可以从
(\w+)\s(?,\s)?
(请参见上)开始,这取决于电子邮件被
包围的事实,并根据需要对其进行自定义

注意此正则表达式不专门查找电子邮件,只查找由
包围的文本

不要摔倒

重新导入
名称=重新搜索(r'(?'))
打印(名称组(0))
>>>名称1
说明:

(?)?
re.search(r'(?)?


编辑/忘记:

要搜索具有多个字符串的字符串,请执行以下操作:

import re

regex = r"\w+([?<! <])"

multi_name = "name1 <email@email.com>, name2 <email@email.com>"
    
matches = re.finditer(regex, multi_name, re.MULTILINE)
    
for group, match in enumerate(matches, start=1):
    print(f"Match: {match.group()}")

>>> name1
>>> name2
重新导入
regex=r“\w+([?,名称2”
matches=re.finditer(regex、multi_name、re.MULTILINE)
对于组,在枚举中匹配(匹配,开始=1):
打印(f“匹配:{Match.group()}”)
>>>名称1
>>>姓名2
重新导入
名称=重新搜索(r'(?'))
打印(名称组(0))
>>>名称1
说明:

(?)?
re.search(r'(?)?


编辑/忘记:

要搜索具有多个字符串的字符串,请执行以下操作:

import re

regex = r"\w+([?<! <])"

multi_name = "name1 <email@email.com>, name2 <email@email.com>"
    
matches = re.finditer(regex, multi_name, re.MULTILINE)
    
for group, match in enumerate(matches, start=1):
    print(f"Match: {match.group()}")

>>> name1
>>> name2
重新导入
regex=r“\w+([?,名称2”
matches=re.finditer(regex、multi_name、re.MULTILINE)
对于组,在枚举中匹配(匹配,开始=1):
打印(f“匹配:{Match.group()}”)
>>>名称1
>>>姓名2


电子邮件是否被
包围?欢迎使用Stack Overflow!请使用、阅读和,并提供一个“为我实现此功能”此网站的主题不在这里。您必须诚实地尝试,然后询问有关您的算法或技术的特定问题。@DeepSpace是的,它们是。电子邮件实际上被
包围了吗?欢迎使用堆栈溢出!请使用、阅读和,并提供一个“为我实现此功能”对于这个网站来说是离题的。你必须诚实地尝试,然后就你的算法或技术提出一个具体的问题。@DeepSpace是的,他们是。我也想过这样做,但只有在没有额外空间的情况下才行得通,我怀疑这是有保证的;事实上,关于
的正则表达式我不认为电子邮件周围都是
。这只是表示的一种方式。@ti7
str.split
如果有多个空格,其行为将相同。
'name1'。split()
返回与
'name1.split()相同的输出
是的,
str.split
默认情况下处理空白。是的,它处理了,谢谢。我也想过这样做,但它只有在没有额外空格的情况下才有效,我怀疑这是有保证的;事实上,关于
的正则表达式我不认为电子邮件被
包围。这只是一种表示方式。@ti7
str.split
会起作用e如果有多个空格,则相同。
'name1.split()
返回与
'name1.split()相同的输出。split()
是的,
str.split
默认处理空白。是的,它处理了,谢谢。这实际上对我更有效,谢谢。这对我更有效,谢谢。
import re

regex = r"\w+([?<! <])"

multi_name = "name1 <email@email.com>, name2 <email@email.com>"
    
matches = re.finditer(regex, multi_name, re.MULTILINE)
    
for group, match in enumerate(matches, start=1):
    print(f"Match: {match.group()}")

>>> name1
>>> name2