2010-01-28 110 views
3

我想在Python中做一個簡單的正則表達式分割。該字符串的形式是FooX,其中Foo是一些字符串,X是任意整數。我有一種感覺,這應該是非常簡單的,但我無法完成它的工作。Python的正則表達式分割,任意長度的整數

在這一點上,任何人都可以推薦一些好的正則表達式閱讀材料嗎?

+0

你怎麼想拆分成?它應該只返回Foo嗎?只有號碼?都? – MAK 2010-01-28 21:04:21

回答

0

假設你想要的「富」與數字之間的分裂,你想要的東西,如:

r/(?<=\D)(?=\d)/ 

將匹配在一個非數字和數字之間的一個點,而不會在消費任何字符分裂。

+1

好主意,但至少在Python中不起作用。它會忽略不匹配任何字符的正則表達式。 – 2010-01-28 21:09:20

+0

...認真嗎?我想知道這種行爲的基本原理是什麼。 – 2010-01-28 21:10:12

+0

@Max S.看到我的編輯...它似乎有一些python畢竟可行性.. – 2010-01-28 21:12:18

1

使用組:

import re 

m=re.match('^(?P<first>[A-Za-z]+)(?P<second>[0-9]+)$',"Foo9") 
print m.group('first') 
print m.group('second') 

使用搜索:

import re 

s='Foo9' 
m=re.search('(?<=\D)(?=\d)',s) 
first=s[:m.start()] 
second=s[m.end():] 

print first, second 
5

不能使用split()因爲已經消耗一些字符,但你可以使用正常的匹配做到這一點。

>>> import re 
>>> r = re.compile(r'(\D+)(\d+)') 
>>> r.match('abc444').groups() 
('abc', '444') 
0
>>> import re 
>>> s="gnibbler1234" 
>>> re.findall(r'(\D+)(\d+)',s)[0] 
('gnibbler', '1234') 

在正則表達式,\ d指任何不是數字,所以\ d +匹配一個或多個的東西並不位數。

同樣\ d意味着什麼,是一個數字,所以\ d +匹配一個或多個數字

1

保持簡單:

>>> import re 
>>> a = "Foo1String12345" 
>>> re.split(r'(\d+)$', a)[0:2] 
['Foo1String', '12345'] 
+0

簡單...並允許「任意字符串」中的數字:-p – MikeyB 2010-01-28 21:31:26