1. 程式人生 > >python3: 字符串和文本(2)

python3: 字符串和文本(2)

表達式 lower 匹配 upper code 語言 修飾符 cti color

6. 字符串忽略大小寫的搜索替換

>>> text = UPPER PYTHON, lower python, Mixed Python
>>> re.findall(python, text, flags=re.IGNORECASE)
[PYTHON, python, Python]
>>> re.sub(python, snake, text, flags=re.IGNORECASE)
UPPER snake, lower snake, Mixed snake
>>>

7.最短匹配

Q

: 你正在試著用正則表達式匹配某個文本模式,但是它找到的是模式的最長可能匹配。 而你想修改它變成查找最短的可能匹配。

S:這個問題一般出現在需要匹配一對分隔符之間的文本的時候(比如引號包含的字符串)。 為了說明清楚,考慮如下的例子:模式 r‘\"(.*)\"‘ 的意圖是匹配被雙引號包含的文本。(.)匹配除了換行外的任何字符

>>> str_pat = re.compile(r"(.*)")
>>> text1 = Computer says "no."
>>> str_pat.findall(text1)
[no.]
>>> text2 = 
Computer says "no." Phone says "yes." >>> str_pat.findall(text2) [no." Phone says "yes.]

第二個例子中搜索 text2 的時候返回結果並不是我們想要的。

為了修正這個問題,可以在模式中的*操作符後面加上?修飾符,就像這樣:

>>> str_pat = re.compile(r"(.*?)")
>>> str_pat.findall(text2)
[no., yes.]
>>>

通過在 * 或者 + 這樣的操作符後面添加一個 ?

可以強制匹配算法改成尋找最短的可能匹配。

8. 多行匹配模式

Q: 你正在試著使用正則表達式去匹配一大塊的文本,而你需要跨越多行去匹配。

S:這個問題很典型的出現在當你用點(.)去匹配任意字符的時候,忘記了點(.)不能匹配換行符的事實。 比如,假設你想試著去匹配C語言分割的註釋:

python3: 字符串和文本(2)