首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用多个分隔符拆分字符串

使用多个分隔符拆分字符串
EN

Stack Overflow用户
提问于 2013-07-27 15:51:47
回答 3查看 122关注 0票数 1

我想用python拆分一个字符串。我已经成功地完成了一个变量,但发现它很难做2。

字符串:

代码语言:javascript
运行
复制
Paragraph 4-2 says. i am going home$ early- Yes.

我需要输出

代码语言:javascript
运行
复制
Paragraph 4-2 says
i am going home 
early
Yes

这个句子应该从.$-中分离出来(但是当它在两个数字(4-2)之间时,它不应该分开)

我该怎么做?

代码语言:javascript
运行
复制
text.split('.')

更新

新的产出应如下:

代码语言:javascript
运行
复制
Paragraph 4-2 says.
i am going home$ 
early-
Yes.
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-07-27 16:38:47

你可以这样做:

代码语言:javascript
运行
复制
>>> 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.']

如果根本不修改匹配组(带条或其他内容),也可以用相同的regex使用findall:

代码语言:javascript
运行
复制
>>> re.findall(r'(.*?[.$\-])(?:\s+|$)',st)
['Paragraph 4-2 says.', 'i am going home$', 'early-', 'Yes.']

这里解释了正则表达式,但总括而言:

代码语言:javascript
运行
复制
(.*?[.$\-])  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匹配,则可能需要将正则表达式更改为\s

票数 1
EN

Stack Overflow用户

发布于 2013-07-27 15:54:24

代码语言:javascript
运行
复制
>>> import re
>>> s = 'Paragraph 4-2 says. i am going home$ early- Yes'
>>>
>>> re.split(r'(?<!\d)\s*[.$-]\s*(?!\d)', s)
['Paragraph 4-2 says', 'i am going home', 'early', 'Yes']
  • \s*[.$-]\s*匹配由0或多个空格(\s*)包围的.$-中的任何一个。
  • (?<!\d)是一个负后视,以确保匹配前没有数字。
  • (?!\d)是一个负前瞻,以确保匹配后没有一个数字.

您可以阅读更多关于这里的内容。

票数 5
EN

Stack Overflow用户

发布于 2013-07-27 15:54:49

代码语言:javascript
运行
复制
>>> re.split('(?<=\D)[.$-](?=\D|$)', s)
['Paragraph 4-2 says', ' i am going home', ' early', ' Yes']
>>> 

(?<\D)[.$-](?=\D)将得到.$-,而不是跟随或由中间人进行操作。而查找和查找将不会消耗任何字符串。因此,字符串将只分裂.$-,而不是被它包围的数字。

编辑:

代码语言:javascript
运行
复制
>>> re.findall('.*?(?<=\D)[.$-](?=[\D]|$)', s)
['Paragraph 4-2 says.', ' i am going home$', ' early-', ' Yes.']
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17899635

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档