正则表达式 - 替换字符串直到遇到第二个大写字母
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)
假设你的单词前总是至少有一个字符要保留在'/'之后,你可以试试下面的正则表达式:
WORLD/[a-zA-Z][^A-Z]*
匹配您要删除的模式。它适用于您的两个示例。
我有一个字符串,它可能有多个子字符串实例,其模式为 "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)
假设你的单词前总是至少有一个字符要保留在'/'之后,你可以试试下面的正则表达式:
WORLD/[a-zA-Z][^A-Z]*
匹配您要删除的模式。它适用于您的两个示例。