MVEs are more concerned with the satisfaction of those they help than with the considerable points they can earn. They are the types of people you feel privileged to call colleagues. Join us in honoring this amazing group of Experts.

Add your voice to the tech community where 5M+ people, just like you, are talking about what matters.

- Help others & share knowledge
- Earn cash & points
- Learn & ask questions

Solved

Posted on 2010-11-24

hello everybody.. im in a bit of problem now..

i need to find roman numerals in a string and convert it to int eg:

"XIV VARA CIVIL" = int 14

"VARA CIVIL XX" = int 20

does anyone know if there is any method for it in web? maybe a regex to find could work but i have no clue or time to make such conversor

thx for the help!

i need to find roman numerals in a string and convert it to int eg:

"XIV VARA CIVIL" = int 14

"VARA CIVIL XX" = int 20

does anyone know if there is any method for it in web? maybe a regex to find could work but i have no clue or time to make such conversor

thx for the help!

5 Comments

Will "VARA CIVIL" always be in the string?

the roman numerals could be anywhere in the string (most of the time they are at either the beggining or at the end, but i cant be sure if that would be always the case)

but the text it will be different everytime.

is it possible to do such thing ?

string y = "VARA CIVIL XX";

string[] x = y.Split(' ');

this makes anarray of strings

x[0] = "VERA"

x[1] = "CIVIL"

x[2] = "XX"

then try each value in the string array x to see if it is a valid roman numeral.

Here is a link to an example of how to convert a roman numeral to a number.

http://www.blackwasp.co.uk

(?i)\b(?=[ivxlcdm]+)M{0,4}

Based on, but slightly modified from, a pattern from: http://stackoverflow.com/questions/267399/how-do-you-match-only-valid-roman-numerals-with-a-regular-expression

That would capture only valid roman numerals, I believe - then you'd have to convert them to an integer.

```
<script language="javascript">
<!--
function Level(i, v, x)
{
this.i = i;
this.v = v;
this.x = x
}
levels = new Array();
levels[0] = new Level('I', 'V', 'X');
levels[1] = new Level('X', 'L', 'C');
levels[2] = new Level('C', 'D', 'M');
function calcDigit(d, l)
{
if (l > 2)
{
str = '';
for (var m = 1; m <= d * Math.pow(10, l - 3) ; m++)
str += 'M';
return str
}
else
if (d == 1)
return levels[l].i
else
if (d == 2)
return levels[l].i + levels[l].i
else
if (d == 3)
return levels[l].i + levels[l].i + levels[l].i
else
if (d == 4)
return levels[l].i + levels[l].v
else
if (d == 5)
return levels[l].v
else
if (d == 6)
return levels[l].v + levels[l].i
else
if (d == 7)
return levels[l].v + levels[l].i + levels[l].i
else
if (d == 8)
return levels[l].v + levels[l].i + levels[l].i + levels[l].i
else
if (d == 9)
return levels[l].i + levels[l].x
else
return ''
}
function toRoman(n)
{
var r = ''
for (var c = 0; c < n.length; c++)
r += calcDigit(eval(n.charAt(c)), n.length - c - 1);
return r
}
function fromRoman(n)
{
var r = 0
for (var c = 0; c < n.length; c++)
{
var chr = n.charAt(c).toLowerCase();
if (c < n.length - 1)
var next = n.charAt(c + 1).toLowerCase()
else
var next = '';
if (c > 0)
var prev = n.charAt(c - 1).toLowerCase()
else
var prev = '';
if (chr == 'i')
{
if (next == 'v')
r += 4
else
if (next == 'x')
r += 9
else
r += 1;
continue
}
if (chr == 'v')
{
if (prev != 'i')
r += 5;
continue
}
if (chr == 'x')
{
if (prev != 'i')
if (next == 'l')
r += 40
else
if (next == 'c')
r += 90
else
r += 10;
continue
}
if (chr == 'l')
{
if (prev != 'x')
r += 50;
continue
}
if (chr == 'c')
{
if (prev != 'x')
if (next == 'd')
r += 400
else
if (next == 'm')
r += 900
else
r += 100;
continue
}
if (chr == 'd')
{
if (prev != 'c')
r += 500;
continue
}
if (chr == 'm')
{
if (prev != 'c')
r += 1000;
continue
}
}
return r
}
function isNuneric(str)
{
for (var c = 0; c < str.length; c++)
{
var chr = str.charAt(c);
if (chr != '0' & chr != '1' & chr != '2' & chr != '3' & chr != '4' & chr != '5' & chr != '6' & chr != '7' & chr != '8' & chr != '9')
return false
}
return true
}
function get(f)
{
var n = f.elements[0].value
if (!isNuneric(n))
{
for (var c = 0; c < n.length; c++)
{
var chr = n.charAt(c).toLowerCase();
if (chr != 'i' & chr != 'v' & chr != 'x' & chr != 'l' & chr != 'c' & chr != 'd' & chr != 'm')
{
alert ('Only the letters IVXLCDM, please');
return false
}
}
mode = 'fromRoman'
}
else
mode = 'toRoman';
if (mode == 'toRoman')
f.elements[0].value = toRoman(f.elements[0].value)
else
f.elements[0].value = fromRoman(f.elements[0].value);
return false
}
function go(site)
{
if (site.selectedIndex>0)
top.location=site.options[site.selectedIndex].value
}
function foc()
{
if (navigator.userAgent.indexOf('Mozilla/3') != -1 | navigator.userAgent.indexOf('Mozilla/4') != -1)
document.forms[0].elements[0].focus()
}
//-->
</script>
```

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Established in 1997, Technology Architects has become one of the most reputable technology solutions companies in the country. TA have been providing businesses with cost effective state-of-the-art solutions and unparalleled service that is designed…

- Anti-Virus Apps
- Ransomware
- The Email Laundry
- Email Servers
- Cybersecurity
- *malware, Microsoft Access

Simple Linear Regression

Join the community of 500,000 technology professionals and ask your questions.