簡體   English   中英

當前面有數字時遞歸匹配每個非數字字符

[英]Recursively matching each non-digit characters when preceded by a digit

我正在嘗試匹配每個直接以數字開頭的非數字字符。 這個想法是用數字0替換O

例如:

58OO
1O1O
2OOOm
FOO
O

所需的 output 是

5800
1010
2000m
FOO
O

我嘗試在我問的上一個問題中使用答案,但我沒有設法使正則表達式適應我的目的。

這是我嘗試的一些正則表達式,但沒有成功(並且有充分的理由): (\d\K(?>O|(?1)))\d\K(?:O|(?R))

與遞歸無關,只需使用一個簡單的while循環:

import re

strings = ["58OO", "1O1O", "2OOOm", "FOO", "O"]

pattern = re.compile(r'(?<=\d)O')

for item in strings:
    while True:
        olditem = item
        item = pattern.sub("0", item)
        if item == olditem:
            # no replacement was made
            break

    print(item)

這產生

5800
1010
2000m
FOO
O

是時候安裝PyPi 正則表達式模塊了:

import regex
texts = ["58OO", "1O1O", "2OOOm", "FOO", "O"]
for text in texts:
  print( regex.sub(r'(?<=\d+O*)O', '0', text) )

Output:

5800
1010
2000m
FOO
O

(?<=\d+O*)O O匹配之前有數字和任意數量的O的 O 。

一個簡單的潛艇就足夠了。

python解釋器的示例:

>>> import re
>>> raw = '''
58OO
O1O1O
2OOOm
FOO
O
'''
>>>
>>> print(re.sub(r'(\d+)(O+)', lambda m: m.group(1) +  '0' * len(m.group(2)), raw))

5800
O1010
2000m
FOO
O

暫無
暫無

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

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