簡體   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