2013-11-22 4 views
0

정규 표현식을 사용하여 숫자를 통화로 다시 포맷하는 데 도움이 필요합니다. 내 입력은 문자열 "123"또는 "123.45"와 비슷합니다. "123"을 "123.00"으로 바꾸고 "123.45"를 그대로 남기고 싶습니다. 정규식은 또한 입력의 유효성을 검사하는 데 사용되므로 "123"과 "123.45"가 일치해야합니다. SSN을 사용하여 9 자리 문자열을 nnn-nn-nnnn 형식으로 형식을 다시 지정했지만 이미 통화 문자열이 날 괴롭 히고 있습니다.숫자를 통화로 바꾸는 정규 표현식

((?!(000|666))([0-8]\d{2}))-?((?!00)\d{2})-?((?!0000)\d{4})$

$1-$4-$5

이 내가 노력하고있어 정규 표현식 (심지어 쉼표를 해결할 수)
([0-9]{1,3}(?:,?[0-9]{3})*)((?:\.[0-9]{2})?)$ 입니다 :

은 SSN을 내 정규 표현식 및 교체 문자열이 있었다
대체 $ 1은 (는) 이전 부분입니다. $ 2는 이후입니다. 대체 문자열이 있으면 $ 2를 표시하고 $ 2가 비어 있으면 ".00"을 표시합니다. 어떻게해야합니까?

더 많은 컨텍스트를 추가하려면 편집 : 왜 내가이 방법을 사용하려고하는지 설명하겠습니다. 데이터베이스에 가서 문자열을 가져 와서 표시하는 코드가 있습니다. 나는 의도적으로 그 현이 무엇인지 알지도 신경도 쓰지 않는다. 텍스트 상자에서 해당 문자열을 편집 할 수도 있습니다. 그런 다음 사람들은 저장된 문자열과 다른 형식으로 문자열을 표시하기 시작했습니다. 먼저 123456789를 표시하고 편집해야하는 SSN을 나타내는 문자열이 123-45-6789 형식으로 시작되었습니다. 그래서 저는 각 데이터베이스 문자열에 대해 정규 표현식 문자열과 대체 문자열을 정의 할 수있는 코드를 작성했습니다. 이 문자열은 재 형식화를 수행하며 정규식 문자열은 입력란의 입력을 확인하는 데 사용됩니다. 그리고이 모든 SSN 문자열에 대한 정규식을 사용하여 위의 나열된 교체 잘 작동합니다. 이제 통화 "123"을 나타내는 문자열을 "123.00"으로 표시하려고합니다. 그래서 내가 올바른 정규식 문자열과 교체 문자열을 생각해 낼 수 있다면 이것을 지원하는 인프라가 있습니다. 내 코드는 이것이 통화인지를 알지 못합니다. 그냥 표시되기 전에 다시 작성해야하는 일반 문자열이라는 것을 알고 있습니다.

+1

정규식을 사용하고있는 스크립트 또는 프로그래밍 언어는 무엇입니까? – Bobulous

+0

C#을 사용하고 있습니다. 다음은 샘플 코드입니다 :'Regex regex = new Regex (regExpressionString, RegexOptions.Compiled); val = regex.Replace (val, replacementString); ' – user3023330

+0

Regex로 설계된 범위를 벗어난 Regex로 조건문을 (쉽게) 수행 할 수는 없습니다. 당신이 "이것이 공백이거나 그렇지 않으면 이것을 원한다"고 말하자마자, 당신은 이제 Regex가 합리적으로 할 수있는 것을 뛰어 넘었습니다. Regex의 제한된 용량에 모든 기능을 집중시키는 대신, 매우 강력하고 다재다능한 언어 (C#)를 활용하여 문자열을 구문 분석하는 것이 어떻습니까? – qJake

답변

0

정규식을 사용하지 않을 것이고, 기본 제공 서식 라이브러리를 사용할 것입니다.

Decimal number; 
if(!Decimal.TryParse(inputNumberAsString, CultureInfo.CurrentCulture, NumberFormat.Number, out number) { 
    // Handle error 
} 

return number.ToString(CultureInfo.CurrentCulture, "c"); 
+0

사실,이 특별한 경우를 정규식없이 더 쉽게 수행 할 수있는 방법은 많이 있습니다. 하지만 나는 어떤 일반적인 문자열을 가져야 만하는 설치가 있는데, 그 중 일부는 알지 못하고 regex 문자열 만 사용하여 다시 작성하고 replacment 문자열로 표시합니다. – user3023330

+0

@ user3023330 그런 다음이 문제가 아니라 원래 문제를 반영하도록 질문을 다시 작성하십시오. – Dai

+0

나는 잘 모르겠다.원래 문제는 정규식을 사용하여 문자열의 유효성을 검사하고 다시 형식을 지정하려는 것이지만 일치하는 문자열과 replacemenet 문자열이 무엇인지 파악할 수 없습니다. 하지만 원래의 문제를 편집하여 입력 내용이 문자열임을 명확히합니다. – user3023330

관련 문제