2正則表達式問題正則表達式拼寫單詞和字符串結尾
如何匹配子模式()中的單詞或2個單詞?
我怎麼能匹配一個字或2個字是要麼其次是像「與」特定的詞或字符串的$
我試圖
(\w+\W*\w*\b)(\W*\bwith\b|$)
結束,但它絕對不是工作
編輯: 我正在考慮匹配「去商場」和「去」,以一種方式,我可以在python中組「去」。
2正則表達式問題正則表達式拼寫單詞和字符串結尾
如何匹配子模式()中的單詞或2個單詞?
我怎麼能匹配一個字或2個字是要麼其次是像「與」特定的詞或字符串的$
我試圖
(\w+\W*\w*\b)(\W*\bwith\b|$)
結束,但它絕對不是工作
編輯: 我正在考慮匹配「去商場」和「去」,以一種方式,我可以在python中組「去」。
也許像這樣?
>>> import re
>>> r = re.compile(r'(\w+(\W+\w+)?)(\W+with\b|\Z)')
>>> r.search('bar baz baf bag').group(1)
'baf bag'
>>> r.search('bar baz baf with bag').group(1)
'baz baf'
>>> r.search('bar baz baf without bag').group(1)
'without bag'
>>> r.search('bar with bag').group(1)
'bar'
>>> r.search('bar with baz baf with bag').group(1)
'bar'
雖然不是我正在尋找的東西,但\ Z技巧爲我解決了這個問題。 問題是什麼?在第一組中做()? – Pwnna 2010-07-19 20:47:40
(xxx)?意味着部件xxx是可選的。因此(\ w +(\ W + \ w +)?)匹配任何\ w + \ W + \ w +匹配或任何\ w +匹配。 – 2010-07-19 20:51:12
@ultimatebuster:** \ Z不是一個訣竅** ......如果你需要匹配行尾而沒有別的東西,它正是你想要的。 – 2010-07-19 22:51:42
這就是我想出了:
s: john
first: john
second: None
with: None
s: john doe
first: john
second: doe
with: None
s: john with
first: john
second: None
with: with
s: john doe width
error: john doe width
s: with
error: with
BTW:
import re
class Bunch(object):
def __init__(self, **kwargs):
self.__dict__.update(kwargs)
match = re.compile(
flags = re.VERBOSE,
pattern = r"""
((?!with) (?P<first> [a-zA-Z_]+))
(\s+ (?!with) (?P<second> [a-zA-Z_]+))?
(\s+ (?P<awith> with))?
(?![a-zA-Z_\s]+)
| (?P<error> .*)
"""
).match
s = 'john doe with'
b = Bunch(**match(s).groupdict())
print 's:', s
if b.error:
print 'error:', b.error
else:
print 'first:', b.first
print 'second:', b.second
print 'with:', b.awith
Output:
s: john doe with
first: john
second: doe
with: with
與試了一下還re.VERBOSE和re.DEBUG是你的朋友。
Regards, Mick。
對不起,但你的問題根本不夠清楚,我不知道你正在嘗試做什麼。 – Robusto 2010-07-19 20:16:44
給出一些字符串的例子,以及你想從中抽出什麼。 – 2010-07-19 20:17:16
當你說'但它絕對不能工作'你的意思是你的正則表達式匹配每一行?因爲這就是我得到的。你的英文說明也是。你要麼匹配「x y」,要麼匹配行尾的一個或兩個單詞。 – cape1232 2010-07-19 20:33:56