regex 正则表达式用于标识行首后跟“-“的罗马数字[重复]

yhived7q  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(80)

此问题在此处已有答案

How do you match only valid roman numerals with a regular expression?(17个回答)
6天前关闭
我试图创建一个正则表达式,匹配罗马数字(从1到99),后跟“-“或“-“。它应该只匹配罗马数字在行首的情况。我想在每个匹配之前添加一个换行符。示例字符串是:

VI - lealdade e ética;  
VII - busca da verdade real;  
VIII - livre convencimento técnico-jurídico do delegado de polícia;  
IX - controle de legalidade dos atos policiais civis;  
X - uso diferenciado da força para preservação da vida, redução do sofrimento e o inciso  
II redução de danos;  
XI – continuidade investigativa  
criminal;  
XII – atuação imparcial na condução da atividade  
investigativa e de polícia judiciária;  
XIII – política de gestão direcionada à proteção e  
à valorização dos seus  
integrantes;  
XIV – unidade de doutrina e uniformidade de  
procedimento;  
XV – autonomia, imparcialidade, tecnicidade e cientificidade investigativa, indiciatória, inquisitória, notarial e pericial; "

字符串
使用模式r'^(I{1,3}|IV|V|VI{1,3}|IX|X{1,3}|XL|L -|– )',我可以在每个罗马数字前插入一个换行符,后跟“-“或“-“。
问题是,它还在“II redução de danos;"之前插入了一个新行。如何纠正这种行为?
使用r'^(I{1,3}|IV|V|VI{1,3}|IX|X{1,3}|XL|L) (?:-|–) '模式,我只能在罗马数字前面插入一个换行符,后面跟“-“。为什么?

rjzwgtxy

rjzwgtxy1#

对于99个值,一个正则表达式既有大量的组合,也有复杂的组合,而不是那么多。简单的列表不容易创建和管理--可以考虑只是测试行.startswith(tuple_of_values)是否包含值,或者通过编程方式从它构建正则表达式

mapping = {
    "I": 1,
    "II": 2,
    ...
    "XCIX": 100,
}

numerals_regex = re.compile("^(" + str("|".join(mapping.keys())) + ") (-|–) (.*)$")

for line in lines:
    match = numerals_regex.match(line.rstrip())
    if match is None:
        # opportunity to deal with line in some other way
        continue
    # line matched!

字符串

相关问题