当前位置: 首页 > news >正文

【Python】正色表达式 - 验证罗马数字

一、题目

You are given a string, and you have to validate whether it's a valid Roman numeral. If it is valid, print True. Otherwise, print False. Tray to create a regular expression for a valid Roman numeral.

Input Format

A single line of input containing a string of Roman characters.

Sample Input

CDXXI

Sample Output

True

References

Regular expressions are a key concept in any programming language. A quick explanation with Python examples is available here. You could also go through the link below to read more about regular expressions in Python.

https://developers.google.com/edu/python/regular-expressions

二、代码

regex_pattern = r'^M{0,3}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$'import reprint(str(bool(re.match(regex_pattern, input()))))

三、解读

题目要求编写一个程序来验证给定的字符串是否是一个有效的罗马数字,罗马数字由以下七个字母组成:I(1)、V(5)、X(10)、L(50)、C(100)、D(500)和 M(1000)。罗马数字的书写规则如下:

IVXLCDM
1510501005001000

1、字母 I、X、C 和 M 可以重复最多3次,例如 III 、 XXX、CCC 和 MMM

2、只有 V 、 L 和 D 可以放在一个较小的数字的左边,表示大数减去小数,例如:

        IV = 4 、IX = 9、XL = 40 、XC = 90、CD = 400

3、除了这些规则之外,罗马数字不包含其他字母和数字。

regex_pattern = r'^M{0,3}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$'

这个正则表达式的组成如下:

  • ^ 表示字符串的开始
  • M{0,3} 表示M可以出现 0 到 3 次
  • (CM|CD|D?C{0,3}) 表示可选的 (900(CM)或 400(CD)),或者 C 可以出现 0 到3 次,且如果出现 D ,则 D 后面不能有 C 。
  • (XC|XL|L?X{0,3}) 表示可选的(90(XC)或 40(XL)),或者 X 可以出现 0 到 3 次,且如果出现 L ,则 L 后面不能有 X 。
  • (IX|IV|V?I{0,3}) 表示可选的(9(IX)或 4 (IV)),或者 I 可以出现 0 到 3 次,且如果出现 V,则 V 后面不能有 I 。
  • $ 表示字符串的结束。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • [VS Code扩展]写一个代码片段管理插件(一):介绍与界面搭建
  • jdk和tomcat的环境配置以及使用nginx代理tomcat来实现负载均衡
  • 0064__管道 (进程间通信)
  • C++数据结构学习(顺序表)
  • 洛谷 P1868 饥饿的奶牛
  • 实现一个全栈模糊搜索匹配的功能
  • 时空预测又爆火了!新SOTA实现零样本精准预测
  • C语言《智能自平衡小车,实现平衡功能的基础上,加入了超声波避障、超声波跟随、蓝牙遥控等功能》+源代码+文档说明
  • MySQL —— 初始数据库
  • 智能闹钟和普通闹钟有什么区别
  • finalshell连接kali-Linux失败问题略谈
  • 书单 | 大模型的书那么多,如何快速选到适合自己的那一本?来,教你!
  • 论文翻译:Large Language Models in Education: Vision and Opportunities
  • 大数据核心概念与技术架构简介
  • CSS雷达光波效果(前端雷达光波效果)
  • [NodeJS] 关于Buffer
  • 「译」Node.js Streams 基础
  • es6--symbol
  • Fastjson的基本使用方法大全
  • idea + plantuml 画流程图
  • mongodb--安装和初步使用教程
  • opencv python Meanshift 和 Camshift
  • Quartz实现数据同步 | 从0开始构建SpringCloud微服务(3)
  • rc-form之最单纯情况
  • SegmentFault 2015 Top Rank
  • spring学习第二天
  • Vue2 SSR 的优化之旅
  • 官方新出的 Kotlin 扩展库 KTX,到底帮你干了什么?
  • 前端之Sass/Scss实战笔记
  • 使用 @font-face
  • 字符串匹配基础上
  • d²y/dx²; 偏导数问题 请问f1 f2是什么意思
  • 好程序员web前端教程分享CSS不同元素margin的计算 ...
  • ​Spring Boot 分片上传文件
  • ​如何使用ArcGIS Pro制作渐变河流效果
  • #《AI中文版》V3 第 1 章 概述
  • #我与Java虚拟机的故事#连载18:JAVA成长之路
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (C语言)字符分类函数
  • (DenseNet)Densely Connected Convolutional Networks--Gao Huang
  • (Qt) 默认QtWidget应用包含什么?
  • (二)Kafka离线安装 - Zookeeper下载及安装
  • (附源码)ssm失物招领系统 毕业设计 182317
  • (附源码)计算机毕业设计SSM基于健身房管理系统
  • (接口自动化)Python3操作MySQL数据库
  • (利用IDEA+Maven)定制属于自己的jar包
  • (深入.Net平台的软件系统分层开发).第一章.上机练习.20170424
  • (四)Android布局类型(线性布局LinearLayout)
  • (转)Groupon前传:从10个月的失败作品修改,1个月找到成功
  • (状压dp)uva 10817 Headmaster's Headache
  • **Java有哪些悲观锁的实现_乐观锁、悲观锁、Redis分布式锁和Zookeeper分布式锁的实现以及流程原理...
  • .NET 6 在已知拓扑路径的情况下使用 Dijkstra,A*算法搜索最短路径
  • .NET CF命令行调试器MDbg入门(一)
  • .Net 访问电子邮箱-LumiSoft.Net,好用
  • .NET 应用启用与禁用自动生成绑定重定向 (bindingRedirect),解决不同版本 dll 的依赖问题