提问人:pedmacedo 提问时间:11/14/2023 最后编辑:wjandreapedmacedo 更新时间:11/14/2023 访问量:78
正则表达式,用于标识行首后跟“-”的罗马数字 [duplicate]
Regex to identify roman numerals followed by " - " at the start of a line [duplicate]
问:
我正在尝试创建一个与罗马数字(从 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; "
使用这种模式,我可以在每个罗马数字之前插入一个换行符,后跟“-”或“-”。
问题在于,它还在“II harm reduction;”之前插入了换行符。我怎样才能纠正这种行为?r'^(I{1,3}|IV|V|VI{1,3}|IX|X{1,3}|XL|L -|– )'
使用模式,我只能在罗马数字后跟“-”之前插入换行符。为什么?r'^(I{1,3}|IV|V|VI{1,3}|IX|X{1,3}|XL|L) (?:-|–) '
答:
0赞
ti7
11/14/2023
#1
有 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!
评论
[IVXL]+
^[IVXL]+(?=\s*\-)
^(?=[IVXLCM]+ [-\u2010-\u2015] )