Python ReXEX用于提取具有前面逗号和αx2b的字符串中间的数据;空格并以空格结束+;(大写X)

Python ReXEX用于提取具有前面逗号和αx2b的字符串中间的数据;空格并以空格结束+;(大写X),python,regex,Python,Regex,我有一个字符串,我正试图使用正则表达式从中提取。以下是我的字符串示例: splitm = 'SM Analyst, AMT Tax Company X Hi.' 我想将名称解析为“SM Analyst”,将公司解析为“AMT税务公司”,并将X后的数据解析为“Hi”。 我解析名称的正则表达式如下所示: x = re.match('^.*?\,', splitm) 对于我正在尝试的公司:(逗号后的所有内容,但都不起作用) y=re.match('^\,(.*?),splitm) 这里有没有关于

我有一个字符串,我正试图使用正则表达式从中提取。以下是我的字符串示例:

splitm = 'SM Analyst, AMT Tax Company X Hi.'
我想将名称解析为
“SM Analyst”
,将公司解析为
“AMT税务公司”
,并将
X
后的数据解析为
“Hi”。

我解析名称的正则表达式如下所示:

x = re.match('^.*?\,', splitm) 
对于我正在尝试的公司:(逗号后的所有内容,但都不起作用)
y=re.match('^\,(.*?),splitm)

这里有没有关于我做错了什么的指针?

插入符号(^)与字符串中第一个字符之前的位置匹配

如果不使用
re.MULTILINE
,则不需要这样做,因为您使用:

如果字符串开头处有零个或多个字符与正则表达式模式匹配,则返回相应的匹配对象

解决方案 我们可以使用命名组捕获单个正则表达式中的相关部分,然后使用以作为字典获得结果:

重新导入
REGEX=r'(?P.+?),\s+(?P.+?)\s+X\s+(?P.+)'
关于match(REGEX,“AMT税务公司X Hi的SM分析师”).groupdict()
{'role':'SM分析师','company':'AMT Tax company','message':'Hi.}

插入符号(^)匹配字符串中第一个字符之前的位置

如果不使用
re.MULTILINE
,则不需要这样做,因为您使用:

如果字符串开头处有零个或多个字符与正则表达式模式匹配,则返回相应的匹配对象

解决方案 我们可以使用命名组捕获单个正则表达式中的相关部分,然后使用以作为字典获得结果:

重新导入
REGEX=r'(?P.+?),\s+(?P.+?)\s+X\s+(?P.+)'
关于match(REGEX,“AMT税务公司X Hi的SM分析师”).groupdict()
{'role':'SM分析师','company':'AMT Tax company','message':'Hi.}

试试这个:

import re

splitm = 'SM Analyst, AMT Tax Company X Hi.'

print(re.findall('(?<=, ).*(?= [A-Z] )',splitm)) # Find string that is between a ', ' and a uppercase letter that has a space on both sides
print(re.findall('(?<= )\w+\.',splitm)) # Find word character string that is between a ' ' and a '.'
试试这个:

import re

splitm = 'SM Analyst, AMT Tax Company X Hi.'

print(re.findall('(?<=, ).*(?= [A-Z] )',splitm)) # Find string that is between a ', ' and a uppercase letter that has a space on both sides
print(re.findall('(?<= )\w+\.',splitm)) # Find word character string that is between a ' ' and a '.'

可能值得用
\s+
替换空格。这非常有效。非常感谢。我也不知道你可以用正则表达式创建一个键值对(dict),所以我绝对是新的学习对象。我很感激用
\s+
替换空格是值得的。这非常有效。非常感谢。我也不知道你可以用正则表达式创建一个键值对(dict),所以我绝对是新的学习对象。我很感激你能回答你做错的地方是^在字符串的开头匹配,而在字符串的开头没有逗号。关于其中一个可能的解决方案,请参见下面的infinity答案。PS,你不需要转义逗号。至于你的错误答案是:^匹配字符串的开头,而字符串的开头没有逗号。关于其中一个可能的解决方案,请参见下面的infinity答案。PS,你不需要转义逗号。