2017-06-13 53 views
1

我有我的輸入數據utf8編碼,並應用它的一些正則表達式來查找逗號,但在下面的字符串,雖然我可以看到逗號可視化,正則表達式返回None,這是什麼錯誤,我測試'''在MyString中,它的工作正常。這是我的輸入數據。正則表達式 - 在第一個逗號前獲取所有內容。 - python

ID   MyString 
765427  Units G2 and G3, kings Drive 
207162  Unit 5/165,Elizabeth Palace 
47568  Unit 766 - 767 Gate 7,Jacks Way, 
15498   Unit F, Himalayas Street, 

按我的正則表達式 - re.search(r".*?,", s['MyString']),輸出應該

ID   MyString 
765427  Units G2 and G3, 
207162  Unit 5/165, 
47568  Unit 766 - 767 Gate 7, 
15498   Unit F, 

但是我得到的是,

ID   MyString 
765427  Units G2 and G3, 
207162  None 
47568  Unit 766 - 767 Gate 7, 
15498   None 

請糾正,如果我的理解是正確的正則表達式。否則最新錯誤。我無法弄清楚這有什麼問題。

+4

從你的標題,你是否想在第一個逗號分割你的字符串?如果這就是你所要做的,那麼你可以把你的字符串和字符串'[split](https://docs.python.org/3/library/stdtypes.html#str.split)調用'', ',但將'split'的第二個參數提供爲'maxsplit',它將只分割多次的字符串。所以 - >'s.split(',',maxsplit = 1)',那麼你將剩下一個列表,你只需要得到列表中的第一個元素。 – idjaw

+0

最終,[this](https://stackoverflow.com/questions/30636248/split-a-string-only-by-first-space-in-python)回答但你想通過一個逗號而不是空格 – idjaw

+1

感謝您的幫助 –

回答

1

由於@idjaw上述建議,要做到這一點更簡單的方法是使用split()功能:

my_string = 'Unit 5/165,Elizabeth Palace' 
ans = my_string.split(',', 1)[0] # maxsplit = 1; 
print ans 

結果:
Unit 5/165

你甚至可以逃脫留下斷maxsplit=1參數,在這種情況下:

ans = my_string.split(',')[0] 

另外,請注意,雖然技術上不是錯誤,但爲類保留變量名的首字母大寫被認爲是最佳做法。請參閱What is the naming convention in Python for variable and function names?PEP8變量命名約定。

正則表達式解決方案:
我注意到,在您的示例結果中,當逗號後面有空格時(在要分析的字符串中),您獲得了預期結果。
但是,當沒有空格後面的逗號時,你的正則表達式返回「None」。

使用正則表達式模式(.*?,)嘗試,而不是.*?,

這裏有幾個用於調試的在線工具和測試正則表達式:
http://pythex.org/
https://regex101.com/
(有一個選項爲您生成的代碼,雖然它可能比必要的更詳細)

+0

是的。這是問題。 –

相關問題