Python 将贪婪元素替换为适当的

Python 将贪婪元素替换为适当的,python,regex,Python,Regex,我有以下清单: import re l = ['Part I, Where I’M Coming From', 'Part Ii, Life Principles', 'Part Iii, Work Principles'] 我想要一个结果 l = ['Part I, Where I’M Coming From', 'Part II, Life Principles', 'Part III, Work Principles'] 我试过: In [19]:

我有以下清单:

import re
l = ['Part I,   Where I’M Coming From',
 'Part Ii,  Life Principles',
 'Part Iii, Work Principles']
我想要一个结果

l = ['Part I,   Where I’M Coming From',
     'Part II,  Life Principles',
     'Part III, Work Principles']
我试过:

In [19]: [re.sub(r'(?<=I)i+', 'I+', s) for s in l]
Out[19]:
['Part I,   Where I’M Coming From',
 'Part II+,  Life Principles',
 'Part II+, Work Principles']

[19]中的
:[re.sub(r'(?一个简单的方法是将
re.sub
与回调函数一起使用。回调处理的逻辑比简单的替换更复杂。在您的情况下,您需要匹配大写字母
i
后的所有小写字母
i
,计算出有多少个
i
,并相应地进行替换

>>> re.sub('(?<=I)(i+)', lambda x: 'I' * len(x.group()), 'Part Iii,  Work Principles')
'Part III,  Work Principles'

现在,您只需要将匹配的字符串大写。

一个选项是简单地使用
re.split
,应用
str.upper
,然后使用
str.format

import re
l = ['Part I,   Where I’M Coming From',
'Part Ii,  Life Principles',
'Part Iii, Work Principles']
new_l = [re.split('(?<=Part)\s|,\s+', i) for i in l]
final_l = ['{} {},  {}'.format(a, b.upper(), c) for a, b, c in new_l]

第六部分第四部分是什么情况?第四部分,我想回答这个问题。如果你的问题得到了充分的回答,你可以。这表明你的问题得到了解决,并帮助了社区,除了你是免费的代表,所以请考虑这样做。谢谢。把东西放下。
<_sre.SRE_Match object; span=(6, 8), match='ii'>
ii
2
>>> p = r'\bM{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})\b'
>>> string = 'Part viiI,  Work Principles'
>>> re.sub(p, lambda x: x.group().upper(), string, flags=re.IGNORECASE)
'Part VIII,  Work Principles'
import re
l = ['Part I,   Where I’M Coming From',
'Part Ii,  Life Principles',
'Part Iii, Work Principles']
new_l = [re.split('(?<=Part)\s|,\s+', i) for i in l]
final_l = ['{} {},  {}'.format(a, b.upper(), c) for a, b, c in new_l]
l = ['Part I,   Where I’M Coming From',
 'Part II,  Life Principles',
 'Part III, Work Principles']