簡體   English   中英

根據它們所在的位置用兩個不同的字符串替換一個子字符串

[英]Replace a substring with two different strings depending on where they are

假設我有一個帶星號的字符串:

myvar = "this is an *italicized* substring"

我想更換*italicized*{i}italicized{/i}的項目我的工作,txt2rpy,但我不知道怎么有兩個不同的子取決於什么命令他們在被替換。

您可以使用正則表達式來替換整個模式:

re.sub(r'\*(.*?)\*', r'{i}\1{/i}', myvar)

在正則表達式中:

  • \\*匹配文字* (使用兩次)
  • (.*?)匹配任意數量的任何(非換行符)字符,盡可能少 - 它也在捕獲組中

在替換中:

  • {i}{/i}是文字
  • \\1意味着把什么放在第一個(在這種情況下,只有)捕獲組

這給出:

>>> import re
>>> myvar = "this is an *italicized* substring"
>>> print(re.sub(r'\*(.*?)\*', r'{i}\1{/i}', myvar))
this is an {i}italicized{/i} substring

如果模式出現不止一次,這也將起作用:

myvar = "this is an *italicized* substring, and here is *another* one"

會給

this is an {i}italicized{/i} substring, and here is {i}another{/i} one

您可以將re.sub與捕獲組一起使用:

import re

txt = "this is an *italicized* substring"

res = re.sub(r"\*([^*]+)\*", "{i}\g<1>{/i}", txt)

將有res為:

this is an {i}italicized{/i} substring

這個模式非常基本:它匹配一個文字* ,然后是字符而不是星號,然后是另一個文字* 這里的要點是我們使用捕獲組來捕獲單詞部分。

然后我們簡單地用我們保存的單詞(通過\\g<1>訪問)替換完整匹配,並用您想要的字符包圍。


演示在這里

創建一個用於解析的循環並保持一個計數器進行跟蹤,每當計數器保持第二個標簽並用第一個標簽替換奇數時。

你能不能用一個 for 循環然后說

myvar = "this is an *italicized* substring"
positions = []
for x in range(len(myvar)):
    if myvar[x] == "*":
       positions.append(x)
inAsteriks = myvar[0:positions[0]] + "{i}" + myvar[positions[0]+1:positions[1]] + "{/i}" + myvar[positions[0]+1:]

暫無
暫無

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

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