2

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

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

例如

   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)。

这可能吗?

4

2 回答 2

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);
}
于 2013-08-14T12:48:18.210 回答
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})$
于 2013-08-14T11:04:31.073 回答