繁体   English   中英

正则表达式在逗号“,”上拆分字符串,但前提是逗号不在数字之间

[英]Regex to split string on comma “,”, but only if comma is not in between digits

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

给定字符串 s = "Consumer notes, State Consumer Forum, Rs.50,000 peratly against ICICI,Andhra Pradesh"

我希望结果是 = ["Consumer notes", "State Consumer Forum", "Rs.50,000 peratly against ICICI", "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 个词,因为它还将 50,000 卢比的数字分成两部分。 我不想要这种分裂。 我该如何解决?

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)后把空格去掉,太。

你可以使用

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

或者

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

请参阅正则表达式 #1演示和正则表达式 #2 演示

细节

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

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

  • , - 一个逗号是...
  • (?!(?<=\\d.)\\d) - 不紧跟一个数字(见(?!...\\d) ),它紧跟一个数字和任何一个字符(它是一个逗号事实上,所以.,这里的工作方式相同)。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM