[英]Obtain word before/after a character with regex in Python
使用捕獲組應該很容易,但我沒有得到正確的詞。 我一直在使用以下內容:
#Before
print(re.sub(r'\b([A-Za-z0-9]+)\b(?=\.?\s*(\&|\-|and))',r'\1','A. & B.',flags=re.IGNORECASE))
A. & B.
#After
print(re.sub(r'(\&|\-|and)\s*\b([A-Za-z0-9]+)\b',r'\2','A. & B.',flags=re.IGNORECASE))
A. B.
字符串可以是以下之一:
A. - B.
A.-B.
A. & B.
A.&B.
A. AND B.
這個想法是在ampersand| hyphen | and
之前/之后獲取單詞ampersand| hyphen | and
ampersand| hyphen | and
ampersand| hyphen | and
我兩個正則表達式分成來獲得這兩個詞。 在這個例子中, before 只會得到A
和 after B
。
為什么前面例子中的捕獲組沒有打印A
和B
?
提前致謝 :)
對於十進制值 1 或 0x01 十六進制,字符串'\\1'
是八進制的。
>>> import re
>>> re.sub(r'\b([A-Za-z0-9]+)\b(?=\.?\s*(\&|\-|and))','\1','A. & B.',re.IGNORECASE)
'\x01. & B.'
正則表達式需要轉義反向引用。
這些替換字符串中的任何一個都指的是捕獲組 1
'\\\\r'
>>> import re
>>> re.sub(r'\b([A-Za-z0-9]+)\b(?=\.?\s*(\&|\-|and))','\\1','A. & B.',re.IGNORECASE)
'A. & B.'
或者,
r'\\1'
>>> import re
>>> re.sub(r'\b([A-Za-z0-9]+)\b(?=\.?\s*(\&|\-|and))',r'\1','A. & B.',re.IGNORECASE)
'A. & B.'
改用re.search()
並在選項&,-,and
之前和之后對所需的單詞進行分組:
text = re.search('(\w+)\.+\s*[\&*\-*AND*and*]*\s*(\w+)\.+', 'A. & B.')
print (text.groups())
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.