簡體   English   中英

替換字符串中的特定單詞

[英]Replace specific word in a string

我發現很難將字符串的單詞更改為固定的單詞。 以下是字符串的內容

 CREATE TABLE "USER1"."TEST_TAB"
   (    "O_ID" CHAR(15),
        "CREATED_DATE" DATE DEFAULT SYSDATE,
        "EVENT_ID" NUMBER,
        "LOD" BLOB,
        "TOPIC" VARCHAR2(765),
        "SCHEMA_ID" VARCHAR2(36),
        "RECORD_ID" CHAR(15),
         CONSTRAINT "R_PKCONDUIT_MESSAGE" PRIMARY KEY ("O_ID", "TOPIC", "EVENT_ID", "CREATED_DATE") ENABLE
   ) O INDEX COMPRESS 2 PCTFREE 10 INITRANS 2 MAXTRANS 255  NOLOGGING
  TABLESPACE "D01"
  STORAGE(
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
 PCTTHRESHOLD 50
 LOB ("LOD") STORE AS BASICFILE (
  DISABLE STORAGE IN ROW CHUNK 8192 RETENTION
  NOCACHE LOGGING
  STORAGE(
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT))
  PARTITION BY HASH ("O_ID")
 (PARTITION "CONDUIT_MESSAGE01"
 LOB ("LOD") STORE AS BASICFILE "LOD01"(
  TABLESPACE "D01" )
  TABLESPACE "D01" ,
 PARTITION "CONDUIT_MESSAGE02"
 LOB ("LOD") STORE AS BASICFILE "LOD02"(
  TABLESPACE "D02" )
  TABLESPACE "D02" ,
 PARTITION "CONDUIT_MESSAGE03"
 LOB ("LOD") STORE AS BASICFILE "LOD03"(
  TABLESPACE "D03" )
  TABLESPACE "D03" ,
 PARTITION "CONDUIT_MESSAGE04"
 LOB ("LOD") STORE AS BASICFILE "LOD04"(
  TABLESPACE "D04" )
  TABLESPACE "D04" ,
 PARTITION "CONDUIT_MESSAGE05"
 LOB ("LOD") STORE AS BASICFILE "LOD05"(
  TABLESPACE "D05" )
  TABLESPACE "D05" ,
 PARTITION "CONDUIT_MESSAGE06"
 LOB ("LOD") STORE AS BASICFILE "LOD06"(
  TABLESPACE "D06" )
  TABLESPACE "D06"
/

試圖將TABLESPACE“ D01” .... TABLESPACE“ D06”更改為TABLESPACE“ COPY_TBS”的固定名稱

string.replace('TABLESPACE \"D[0-9][0-9]+\"','TABLESPACE COPY_TBS')

似乎無法正常工作。 有什么辦法可以改變這個字符串。

您應該使用re.sub

string = re.sub(r"TABLESPACE \"D[0-9]+\"", "TABLESPACE COPY_TBS", string)

string.replace不適用於正則表達式。

演示版

另外,我更改了模式以使表空間名稱與D[0-9]+相匹配,假設您想要D后跟任意數字。 如果您確實只想限制兩位數,請使用D[0-9]{2}

與其他答案不同,這里有一種更簡單的方法。 將數據分配給變量:

a = '''CREATE TABLE "USER1"."TEST_TAB"
   (    "O_ID" CHAR(15),
        "CREATED_DATE" DATE DEFAULT SYSDATE,
        "EVENT_ID" NUMBER,
        "LOD" BLOB,
        "TOPIC" VARCHAR2(765),
        "SCHEMA_ID" VARCHAR2(36),
        "RECORD_ID" CHAR(15),
         CONSTRAINT "R_PKCONDUIT_MESSAGE" PRIMARY KEY ("O_ID", "TOPIC", "EVENT_ID", "CREATED_DATE") ENABLE
   ) O INDEX COMPRESS 2 PCTFREE 10 INITRANS 2 MAXTRANS 255  NOLOGGING
  TABLESPACE "D01"
  STORAGE(
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
 PCTTHRESHOLD 50
 LOB ("LOD") STORE AS BASICFILE (
  DISABLE STORAGE IN ROW CHUNK 8192 RETENTION
  NOCACHE LOGGING
  STORAGE(
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT))
  PARTITION BY HASH ("O_ID")
 (PARTITION "CONDUIT_MESSAGE01"
 LOB ("LOD") STORE AS BASICFILE "LOD01"(
  TABLESPACE "D01" )
  TABLESPACE "D01" ,
 PARTITION "CONDUIT_MESSAGE02"
 LOB ("LOD") STORE AS BASICFILE "LOD02"(
  TABLESPACE "D02" )
  TABLESPACE "D02" ,
 PARTITION "CONDUIT_MESSAGE03"
 LOB ("LOD") STORE AS BASICFILE "LOD03"(
  TABLESPACE "D03" )
  TABLESPACE "D03" ,
 PARTITION "CONDUIT_MESSAGE04"
 LOB ("LOD") STORE AS BASICFILE "LOD04"(
  TABLESPACE "D04" )
  TABLESPACE "D04" ,
 PARTITION "CONDUIT_MESSAGE05"
 LOB ("LOD") STORE AS BASICFILE "LOD05"(
  TABLESPACE "D05" )
  TABLESPACE "D05" ,
 PARTITION "CONDUIT_MESSAGE06"
 LOB ("LOD") STORE AS BASICFILE "LOD06"(
  TABLESPACE "D06" )
  TABLESPACE "D06"'''

然后使用循環替換:

for i in range(1,7):
    a = a.replace('TABLESPACE "D0'+str(i)+'"','TABLESPACE COPY_TBS')

您可以在此處在線進行測試: https : //repl.it/@blackskull12/DisfiguredMemorableStructs

編輯:

由於它不適用於大於10數字,因此您的循環可以像(它適用於小於100的數字):

for i in range(1,20):
    a = a.replace('TABLESPACE "D'+str(i).zfill(2)+'"','TABLESPACE COPY_TBS')

暫無
暫無

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

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