Python 使用多个分隔符拆分字符串
我想使用python拆分字符串。我已经成功地为一个变量完成了这项工作,但发现为2个变量完成这项工作很困难 字符串:Python 使用多个分隔符拆分字符串,python,regex,Python,Regex,我想使用python拆分字符串。我已经成功地为一个变量完成了这项工作,但发现为2个变量完成这项工作很困难 字符串: Paragraph 4-2 says. i am going home$ early- Yes. 我需要输出为 Paragraph 4-2 says i am going home early Yes 句子应从、$和-中拆分(但当它位于两个数字(4-2)之间时,不应拆分) 我该怎么做 text.split('.') 更新 新输出应如下所示: Paragraph 4-2 sa
Paragraph 4-2 says. i am going home$ early- Yes.
我需要输出为
Paragraph 4-2 says
i am going home
early
Yes
句子应从
、$
和-
中拆分(但当它位于两个数字(4-2)之间时,不应拆分)
我该怎么做
text.split('.')
更新
新输出应如下所示:
Paragraph 4-2 says.
i am going home$
early-
Yes.
>>重新导入
>>>第4-2段说。我要早回家$Yes'
>>>
>>>重新拆分(r’(?>>>导入重新
>>>s='第4-2段说,我要早回家$Yes'
>>>
>>>您可以执行以下操作:
>>> import re
>>> st='Paragraph 4-2 says. i am going home$ early- Yes.'
>>> [m.group(1) for m in re.finditer(r'(.*?[.$\-])(?:\s+|$)',st)]
['Paragraph 4-2 says.', 'i am going home$', 'early-', 'Yes.']
如果您根本不打算修改匹配组(使用strip或其他方法),也可以将findall与相同的正则表达式一起使用:
>>> re.findall(r'(.*?[.$\-])(?:\s+|$)',st)
['Paragraph 4-2 says.', 'i am going home$', 'early-', 'Yes.']
对正则表达式进行了解释,但总结如下:
(.*?[.$\-]) is the capture group containing:
.*? Any character (except newline) 0 to infinite times [lazy]
[.$\-] Character class matching .$- one time
(?:\s+|$) Non-capturing Group containing:
\s+ First alternate: Whitespace [\t \r\n\f] 1 to infinite times [greedy]
| or
$ Second alternate: end of string
根据您的字符串,如果您不想将\r\n\f
与\s
匹配,您可能需要将正则表达式更改为(.*.[.$\-])(?:[+\124;$)
,您可以执行以下操作:
>>> import re
>>> st='Paragraph 4-2 says. i am going home$ early- Yes.'
>>> [m.group(1) for m in re.finditer(r'(.*?[.$\-])(?:\s+|$)',st)]
['Paragraph 4-2 says.', 'i am going home$', 'early-', 'Yes.']
如果您根本不打算修改匹配组(使用strip或其他方法),也可以将findall与相同的正则表达式一起使用:
>>> re.findall(r'(.*?[.$\-])(?:\s+|$)',st)
['Paragraph 4-2 says.', 'i am going home$', 'early-', 'Yes.']
对正则表达式进行了解释,但总结如下:
(.*?[.$\-]) is the capture group containing:
.*? Any character (except newline) 0 to infinite times [lazy]
[.$\-] Character class matching .$- one time
(?:\s+|$) Non-capturing Group containing:
\s+ First alternate: Whitespace [\t \r\n\f] 1 to infinite times [greedy]
| or
$ Second alternate: end of string
根据字符串的不同,您可能需要将正则表达式更改为(.*?[.$\-])(?:[]+\124;$)
如果你不想将\r\n\f
与\s
匹配,4$2
需要拆分吗?那4.2
呢?@MartijnPieters我不认为这是重复的;这个问题有更多的内容。@arshajii:很公平,收回了。4$2
需要拆分吗?那4.2
呢jnpiers我不认为这是重复的;这个问题还有更多。@arshajii:很好,收回。不需要在字符类中转义点。@SteveP.很好;我添加了一些解释。有没有办法在句子末尾附加拆分字符?(-.$
)@user1315906你能举个例子说明你的意思吗?我已经更新了我的帖子。请看一看。我已经给出了预期的输出。不需要在字符类中转义点。@SteveP。很公平;我添加了一些解释。有没有办法在句子末尾附加拆分字符?(-.$
)@user1315906你能举个例子说明你的意思吗?我已经更新了我的帖子。请看一看。我已经给出了预期的输出。我也在考虑使用findall
,如果我用find all替换split,它将不起作用。我认为split是一个不错的选择。你有固定的格式。对于findall,似乎会有一个更复杂的正则表达式@user1315906I我正在考虑在句子的末尾添加$-
字符。如果是这样,我应该做什么更改(无论如何,我的原始帖子中没有问到这一点)你是什么意思?如果字符串末尾是$-
,拆分也会起作用,除非结果列表中有一个空字符串。我不认为这会有问题。我已经更新了我的问题。我已经更新了我帖子中的预期输出。请看一看。如果我用h find all,它不起作用。我认为split是一个不错的选择。您有固定的格式。对于findall,似乎会有一个更复杂的正则表达式。@user1315906I我正在考虑在句子末尾添加$-
字符。如果是这样,我应该做什么更改(无论如何,我的原始帖子中没有问到这一点)你的意思是什么?如果字符串末尾是$-
,则拆分也会起作用,但结果列表中会有一个空字符串。我认为这不会有问题。我已更新了我的问题。我已更新了帖子中的预期输出。请看一看。