正则表达式 - 替换字符串直到遇到第二个大写字母

regex - Substitute a string till you encounter second capital letter

我有一个字符串,它可能有多个子字符串实例,其模式为 "WORLD/XyzRights""WORLD/abcNext"。也就是说,"WORLD" 后跟 "/" 然后是一个单词,然后是另一个以大写字母开头的单词。我想分别将字符串替换为 "Rights""Next"

预期的输出是:删除 "World/string" 直到下一个大写字母 虽然 "/" 之后的字母也可以是大写字母,但我们也应该删除它。因此,在上述两种情况下: "Rights""Next"

我试过这个:

re.sub("""WORLD\/[A-Za-z]+(.*?)[^A-Z]""", " ", completeText, flags=re.S)

但是,这也会删除 "Rights""Next" 并保留剩余的字符串

只需添加一个可选模式来匹配 / 旁边的第一个大写字母。

>>> import re
>>> s = ["WORLD/XyzRights", "WORLD/abcNext"]
>>> [re.sub(r'WORLD/[A-Z]?[a-z]+([A-Z])', r'', i) for i in s]
['Rights', 'Next']
>>> 

我会使用以下模式进行替换:

WORLD/.*([A-Z].*)

然后替换为捕获的组</code>。这表示贪婪地匹配并消耗第一个斜线之后的所有内容,直到遇到 <em>last</em> 大写字母,这是我们要捕获的单词的开头。然后,捕获最后一个词并将其用于替换。</p> <pre><code>re.sub("""WORLD/.*([A-Z].*)""", r"", "WORLD/XyzRights", flags=re.S)

Demo

假设你的单词前总是至少有一个字符要保留在'/'之后,你可以试试下面的正则表达式:

WORLD/[a-zA-Z][^A-Z]*

匹配您要删除的模式。它适用于您的两个示例。