我想在Python中做一個簡單的正則表達式分割。該字符串的形式是FooX,其中Foo是一些字符串,X是任意整數。我有一種感覺,這應該是非常簡單的,但我無法完成它的工作。Python的正則表達式分割,任意長度的整數
在這一點上,任何人都可以推薦一些好的正則表達式閱讀材料嗎?
我想在Python中做一個簡單的正則表達式分割。該字符串的形式是FooX,其中Foo是一些字符串,X是任意整數。我有一種感覺,這應該是非常簡單的,但我無法完成它的工作。Python的正則表達式分割,任意長度的整數
在這一點上,任何人都可以推薦一些好的正則表達式閱讀材料嗎?
假設你想要的「富」與數字之間的分裂,你想要的東西,如:
r/(?<=\D)(?=\d)/
將匹配在一個非數字和數字之間的一個點,而不會在消費任何字符分裂。
好主意,但至少在Python中不起作用。它會忽略不匹配任何字符的正則表達式。 – 2010-01-28 21:09:20
...認真嗎?我想知道這種行爲的基本原理是什麼。 – 2010-01-28 21:10:12
@Max S.看到我的編輯...它似乎有一些python畢竟可行性.. – 2010-01-28 21:12:18
使用組:
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
不能使用split()
因爲已經消耗一些字符,但你可以使用正常的匹配做到這一點。
>>> import re
>>> r = re.compile(r'(\D+)(\d+)')
>>> r.match('abc444').groups()
('abc', '444')
>>> import re
>>> s="gnibbler1234"
>>> re.findall(r'(\D+)(\d+)',s)[0]
('gnibbler', '1234')
在正則表達式,\ d指任何不是數字,所以\ d +匹配一個或多個的東西並不位數。
同樣\ d意味着什麼,是一個數字,所以\ d +匹配一個或多個數字
保持簡單:
>>> import re
>>> a = "Foo1String12345"
>>> re.split(r'(\d+)$', a)[0:2]
['Foo1String', '12345']
簡單...並允許「任意字符串」中的數字:-p – MikeyB 2010-01-28 21:31:26
你怎麼想拆分成?它應該只返回Foo嗎?只有號碼?都? – MAK 2010-01-28 21:04:21