簡體   English   中英

python 正則表達式 re.sub:刪除模式之前或之后的所有內容,直到以兩種方式找到特定條件

[英]python regex re.sub: remove everything before or after a pattern until find a specific condition in both ways

如果兩個大寫字母之間有“年份”,我正在嘗試刪除它們之間的所有內容。

這是我所擁有的:

import re

string = 'Sep 09 2018*57.10*58.05*Sep 08 2018*56.76*54.91*Sep 07 2018*58.14*55.20*Sep 06 2018*55.07*54.66*Sep 06 2018*0.91 higher than last year, blablabla*Sep 05 2018*54.71*53.70'

string = re.sub(r'([A-Z].*year)(.*?)(?=[A-Z])', '*', string)

而且,我期望得到:

string = 'Sep 09 2018*57.10*58.05*Sep 08 2018*56.76*54.91*Sep 07 2018*58.14*55.20*Sep 06 2018*55.07*54.66*Sep 05 2018*54.71*53.70'

因此,我“刪除”了“year”之前的第一個大寫字母之前的所有內容以及下一個之前的所有內容,這意味着“*Sep 06 2018*0.91 比去年高 0.91,blablabla”,但我的代碼是從頭開始的,而不是從“年”開始,然后向后看。 我已經在“一年”之后解決了。

感謝是否有人可以幫助我解決這個問題。

您可以使用

[A-Z][^A-Z]*year[^A-Z]*(?=[A-Z])

查看正則表達式演示

細節

  • [AZ] - 大寫字母
  • [^AZ]* - 0+ 個字符而不是大寫字母
  • year - 一個字
  • [^AZ]* - 0+ 個字符而不是大寫字母
  • (?=[AZ]) - 在當前位置的右側,應該有一個大寫字母。

在 Python 中,使用

string = re.sub(r'[A-Z][^A-Z]*year[^A-Z]*(?=[A-Z])', '', string)

暫無
暫無

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

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