簡體   English   中英

帶條件的斜杠后刪除字符串

[英]Remove string after slash with condition

我想刪除短語中的第二部分,只要它長於 3 個字符(字母和數字),如果字符為 3 個或更少,則添加空格。

在以下測試集中:

CENTRAL CARE HOSPITAL/HOPITAL CENTRALE DE SOINS
ABC/DEF
FOUNDATION INSTITUTION/FUNDATION DEL INSTITUTO
HAPPY SPRING BREAK 20/20

結果應該是

CENTRAL CARE HOSPITAL
ABC DEF
FOUNDATION INSTITUTION
HAPPY SPRING BREAK 20 20

我的第一次嘗試是這樣的:

([^\/]+$)

但是,斜線后面的所有字符串都沒有了,因為它沒有任何限制。 我需要包含一個否定的前瞻,說明當斜杠后有超過 3 個字符時,我需要刪除字符串:

text= re.sub(r'(^[^\/]+)(?:[\/])(?![A-Z]{3})',
             r'\1 ',
             text,
             0,
             re.IGNORECASE)

我得到以下不正確的信息:

CENTRAL CARE HOSPITAL/HOPITAL CENTRALE DE SOINS 
ABC DEF
FOUNDATION INSTITUTION/FUNDATION DEL INSTITUTO 
HAPPY SPRING BREAK 20 20

我怎樣才能擺脫前面的斜線和字符串?

謝謝

您可以使用 2 個捕獲組來捕獲/前后的 1-3 個字符 AZ 或數字,並在替換中使用這些組,中間有一個空格。

使用交替匹配正斜杠,然后是要刪除的其余部分。

\b([A-Z0-9]{1,3})/([A-Z0-9]{1,3})\b|/.*

在替換中使用 2 個捕獲組

r"\1 \2"

解釋

  • \\b詞邊界
  • ([A-Z0-9]{1,3})捕獲第 1 組,匹配 1-3 次 AZ 或一個數字
  • /字面匹配
  • ([A-Z0-9]{1,3})捕獲第 2 組,匹配 1-3 次 AZ 或一個數字
  • \\b詞邊界
  • | 或者
  • /.*匹配/和 0+ 次除換行符以外的任何字符

正則表達式演示| Python 演示

示例代碼

import re

regex = r"\b([A-Z0-9]{1,3})/([A-Z0-9]{1,3})\b|/.*"

text = ("CENTRAL CARE HOSPITAL/HOPITAL CENTRALE DE SOINS\n"
    "ABC/DEF\n"
    "FOUNDATION INSTITUTION/FUNDATION DEL INSTITUTO\n"
    "HAPPY SPRING BREAK 20/20")

result = re.sub(regex, r"\1 \2", text)
print (result)

輸出

CENTRAL CARE HOSPITAL 
ABC DEF
FOUNDATION INSTITUTION 
HAPPY SPRING BREAK 20 20

你必須使用正則表達式嗎? 這樣做有什么問題?

tests = [
    "CENTRAL CARE HOSPITAL/HOPITAL CENTRALE DE SOINS", 
    "ABC/DEF", 
    "FOUNDATION INSTITUTION/FUNDATION DEL INSTITUTO", 
    "HAPPY SPRING BREAK 20/20"
]

for test in tests:
    separate = test.split("/", 1)
    print(separate[0] if len(separate[1])>3 else test)

試試這個正則表達式模式:

text= ["CENTRAL CARE HOSPITAL/HOPITAL CENTRALE DE SOINS ",
       "ABC/DEF",
       "FOUNDATION INSTITUTION/FUNDATION DEL INSTITUTO",
       "HAPPY SPRING BREAK 20/20"]

for element in text:
    str_res = re.sub(r'(?:[\/])([A-Z0-9]{0,3}\b)|[^\/]*$',
                     r' \1',
                     element,
                     0,
                     re.IGNORECASE)
    print(str_res)

暫無
暫無

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

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