簡體   English   中英

如何使用正則表達式匹配字符串的一部分多次重疊?

[英]How to match part of a string multiple overlapping times with regex?

我需要一個 Python 正則表達式多次匹配字符串的一部分:

我的字符串: abcd

我想有這樣的組:

  1. ab
  2. bc
  3. cd

有人知道如何做到這一點嗎?

您可以使用前瞻來獲得重疊匹配:

(?=\b([A-Za-z]+-[A-Za-z]+)\b)

請參閱正則表達式演示

詳情

  • (?= - 與緊隨其后的位置匹配的正向前瞻的開始
    • \b - 單詞邊界
    • ([A-Za-z]+-[A-Za-z]+) - 第 1 組:一個或多個 ASCII 字母, - ,一個或多個 ASCII 字母
    • \b - 單詞邊界
  • ) - 前瞻結束。

在 Python 中,將其與re.findall一起使用:

import re
text = "aaaa-bb-ccc-dd"
print( re.findall(r'(?=\b([A-Z]+-[A-Z]+)\b)', text, re.I) )
# => ['aaaa-bb', 'bb-ccc', 'ccc-dd']

請參閱Python 演示 注意我在代碼中將[A-Za-z]更改為[AZ] ,因為我在re.I選項的幫助下使正則表達式匹配不區分大小寫。 確保您使用的是r字符串文字前綴,否則\b將被視為退格字符\x08 ,而不是單詞邊界。

變化

  • (?=\b([^\W\d_]+-[^\W\d_]+)\b) - 匹配任何 Unicode 字母
  • (?=(?<?[^\W\d_])([^\W\d_]+-[^\W\d_]+)(?![^\W\d_])) - 匹配任何 Unicode字母和邊界是任何非字母

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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