首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正则表达式用于拆分逗号",“上的字符串,但仅当逗号不在数字之间时

正则表达式用于拆分逗号",“上的字符串,但仅当逗号不在数字之间时
EN

Stack Overflow用户
提问于 2014-11-09 06:57:27
回答 2查看 141关注 0票数 1

我怎么能把这个字符串分割成单独的单词-

给定字符串s=“消费者笔记,国家消费者论坛,50,000卢比,反对ICICI,安德拉邦”

我希望结果是=“消费者笔记”,“国家消费者论坛”,“50,000卢比反对ICICI",”安得拉邦“

我是regex的新手,不能为此编写regex。

目前我正在做这件事

代码语言:javascript
复制
s = "Consumer notes, State Consumer Forum, Rs.50,000 penatly against ICICI,Andhra Pradesh"
result = set(w for w in s.split(r','))
print result

result:- 
set(['Andhra Pradesh', ' Rs.50', 'Consumer notes', '000 penatly against ICICI', ' State Consumer Forum'])

这给了我5个单词,因为它还将数字50,000分成两部分。我不想让你们分开。我该怎么解决它呢?

EN

回答 2

Stack Overflow用户

发布于 2014-11-09 07:00:57

代码语言:javascript
复制
In [1]: s = "Consumer notes, State Consumer Forum, Rs.50,000 penatly against ICICI,Andhra Pradesh"

In [2]: import re

In [3]: re.split(r'(?<!\d),(?!\d)',s)
Out[3]: 
['Consumer notes',
 ' State Consumer Forum',
 ' Rs.50,000 penatly against ICICI',
 'Andhra Pradesh']

您也可以使用re.split(r'(?<!\d),\s*(?!\d)',s)删除,之后的空格。

票数 5
EN

Stack Overflow用户

发布于 2021-02-03 17:56:57

您可以使用以下任一方法

代码语言:javascript
复制
(?<!\d),|,(?!\d)

代码语言:javascript
复制
,(?!(?<=\d.)\d)

请参阅regex #1演示和regex #2 demo

详细信息

  • (?<!\d), -前面不紧跟digit
  • | - or
  • ,(?!\d)的逗号-后面不紧跟数字

的逗号

这种模式的效率不是很高,因为1)交替和2)在模式开始时使用的lookbehind使得正则表达式引擎检查字符串中的每个位置。

  • , - is...
  • (?!(?<=\d.)\d)的逗号-后面不会紧跟一个数字(参见(?!...\d)),后面紧跟一个数字和任何一个字符(它实际上是一个逗号,所以这里的.,的作用是一样的)。

第二种模式效率更高,因为正则表达式引擎只需要测试文本中的逗号。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26823005

复制
相关文章

相似问题

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