簡體   English   中英

在Python中使用正則表達式獲取字符之前/之后的單詞

[英]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

為什么前面例子中的捕獲組沒有打印AB

提前致謝 :)

對於十進制值 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM