Validating Roman Numerals Using Regular expression
Last Updated :
27 Jan, 2023
Given a String, and You have to validate whether the given String is Valid Roman Numeral or not. If it is valid print True else False.
Note: Numerals are lying between 1 to 3999.
Examples:
Input: String = IX
Output: True
Input: String = 54IVC
Output: False
Roman numerals are based on below symbols.
SYMBOL VALUE
I 1
IV 4
V 5
IX 9
X 10
XL 40
L 50
XC 90
C 100
CD 400
D 500
CM 900
M 1000
A number in Roman Numerals is a string of these symbols written in descending order(e.g. M’s first, followed by D’s, etc.). However, in a few specific cases, to avoid four characters being repeated in succession (such as IIII or XXXX), subtractive notation is often used as follows:
- I placed before V or X indicates one less, so four is IV (one less than 5) and 9 is IX (one less than 10).
- X placed before L or C indicates ten less, so forty is XL (10 less than 50) and 90 is XC (ten less than a hundred).
- C placed before D or M indicates a hundred less, so four hundred is CD (a hundred less than five hundred) and nine hundred is CM (a hundred less than a thousand).
Approach:
- The Regular Expression to check if a string is Valid Roman Numeral or not is this:
^M{0,3}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$
- In which,
- M{0,3} specifies the thousands section and basically restrains it to between 0 and 4000
- (CM|CD|D?C{0,3}) is for the hundreds section.
- (XC|XL|L?X{0,3}) is for the tens place.
- Finally, (IX|IV|V?I{0,3}) is the units section.
- Import regular expression and search the input string in the expression if the string exists return True else return False
Below is the implementation of the above approach.
C++
#include <iostream>
#include <regex>
using namespace std;
bool ValidationOfRomanNumerals(string str)
{
const regex pattern( "^M{0,3}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$" );
if (str.empty()) {
return false ;
}
if (regex_match(str, pattern)) {
return true ;
}
else {
return false ;
}
}
int main()
{
string str1 = "IX" ;
cout << ValidationOfRomanNumerals(str1) << endl;
return 0;
}
|
Java
import java.util.regex.*;
class GFG {
public static boolean
ValidationOfRomanNumerals(String str)
{
String regex
= "^M{0,3}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$" ;
Pattern p = Pattern.compile(regex);
if (str == null ) {
return false ;
}
Matcher m = p.matcher(str);
return m.matches();
}
public static void main(String args[])
{
String str1 = "IX" ;
System.out.println(
"IS " + str1 + " valid ROMAN NUMERAL:? "
+ ValidationOfRomanNumerals(str1));
}
}
|
Python3
def ValidationOfRomanNumerals(string):
import re
print ( bool (re.search(r "^M{0,3}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$" ,string)))
string = "XI"
ValidationOfRomanNumerals(string)
|
C#
using System;
using System.Text.RegularExpressions;
class GFG
{
static void Main( string [] args)
{
string [] str={ "IX" };
foreach ( string s in str) {
Console.WriteLine( ValidationOfRomanNumerals(s) ? "true" : "false" );
}
Console.ReadKey(); }
public static bool ValidationOfRomanNumerals( string str)
{
string strRegex = @"^M{0,3}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$" ;
Regex re = new Regex(strRegex);
if (re.IsMatch(str))
return ( true );
else
return ( false );
}
}
|
Javascript
function ValidationOfRomanNumerals(str)
{
let regex = new RegExp(/^M{0,3}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$/);
if (str == null ) {
return "false" ;
}
if (regex.test(str) == true ) {
return "true" ;
}
else {
return "false" ;
}
}
let str1 = "XI" ;
console.log(ValidationOfRomanNumerals(str1));
|
Time Complexity: O(N) where N is the length of the given string.
Auxiliary Space: O(1)
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...