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

时间:2014-11-08 22:57:27

标签: python regex string

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

鉴于字符串s =“消费者票据,国家消费者论坛,对ICICI,Andhra Pradesh的50,000卢比”

我希望结果是= [“消费者备注”,“国家消费者论坛”,“反对ICICI的50,000卢比”,“Andhra Pradesh”]

我是正则表达式的新手,我不能为此写正则表达式。

目前我正在这样做

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个单词,因为它还将数字Rs 50,000分成2个部分。而且我不希望这种分裂。我该如何解决?

2 个答案:

答案 0 :(得分:5)

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)删除,之后的空格。

答案 1 :(得分:0)

你可以使用任何一个

(?<!\d),|,(?!\d)

,(?!(?<=\d.)\d)

查看 regex #1 演示和 regex #2 demo

详情

  • (?<!\d), - 前面没有直接跟数字的逗号
  • | - 或
  • ,(?!\d) - 逗号后不紧跟数字

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

  • , - 逗号是...
  • (?!(?<=\d.)\d) - 不紧跟数字(参见 (?!...\d)),紧跟在数字和任何一个字符之前(实际上它是一个逗号,所以 . 和 { {1}} 在这里也一样)。

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