正则表达式。检查并填充字符串以确保使用某种字符串格式

时间:2013-08-14 11:00:49

标签: regex string formatting

是否可以取一个字符串,并重新格式化以确保输出始终是相同的格式。

我的标识号始终遵循相同的格式:

e.g。

   166688205F02

   16         66882          05     F          02
 (15/16) (any 5 digit no) (05/06) (A-Z) (any 2 digit no)

有时这些表达为:

   66882 5F 2
   668825F2
   66882 5 F 2

我想要使用这些惰性表达式中的任何一个,并将它们填充到适当的格式,如上所述(第一组默认为16)。

这可能吗?

2 个答案:

答案 0 :(得分:2)

您的号码可以通过以下正则表达式进行匹配:

^ *(1[56])? *(\d{5}) *(0?[56]) *([A-Z]) *(\d{1,2}) *$

这是一个粗略的细分。我命名了识别号的部分。你可能有更合适的名字。:

^ *         #Start the match at the beginning of a string and consume all leading spaces if any.
(1[56])?    #GROUP 1: The Id number prefix. (Optional)
 *          #Consume spaces if any.
(\d{5})     #GROUP 2: The five digit identifier code.
 *          #Consume spaces if any.
(0?[56])    #GROUP 3: The two digit indicator code.
 *          #Consume spaces if any.
([A-Z])     #GROUP 4: The letter code.
 *          #Consume spaces if any.
(\d{1,2})   #GROUP 5: The end code.
 *$         #End the match with remaining spaces and the end of the string.

您没有提及您使用的语言。这是我在C#中编写的一个函数,它使用此正则表达式重新格式化输入标识号。

private string FormatIdentificationNumber(string inputIdNumber) {
    const string DEFAULT_PREFIX = "16";
    const string REGEX_ID_NUMBER = @"^ *(1[56])? *(\d{5}) *(0?[56]) *([A-Z]) *(\d{1,2}) *$";
    const int REGEX_GRP_PREFIX = 1;
    const int REGEX_GRP_IDENTIFIER = 2;
    const int REGEX_GRP_INDICATOR = 3;
    const int REGEX_GRP_LETTER_CODE = 4;
    const int REGEX_GRP_END_CODE = 5;

    Match m = Regex.Match(inputIdNumber, REGEX_ID_NUMBER, RegexOptions.IgnoreCase);
    if (!m.Success) return inputIdNumber;

    string prefix = m.Groups[REGEX_GRP_PREFIX].Value.Length == 0 ? DEFAULT_PREFIX : m.Groups[REGEX_GRP_PREFIX].Value;
    string identifier = m.Groups[REGEX_GRP_IDENTIFIER].Value;
    string indicator = m.Groups[REGEX_GRP_INDICATOR].Value.PadLeft(2, '0');
    string letterCode = m.Groups[REGEX_GRP_LETTER_CODE].Value.ToUpper();
    string endCode = m.Groups[REGEX_GRP_END_CODE].Value.PadLeft(2, '0');
    return String.Concat(prefix, identifier, indicator, letterCode, endCode);
}

答案 1 :(得分:0)

您可以用空白字符替换空格字符。

以JS为例:

"66882 5F 2".replace(' ','') // Will output "668825F2"
"66882 5 F        2".replace(' ','') // Will output "668825F2"

使用正则表达式,您可以使用“\ s”分隔符作为空格

首先通过替换空白字符来消除空格,然后使用此正则表达式

^1[5|6]([0-9]{5})0[5|6][A-Z]([0-9]{2})$