是否可以取一个字符串,并重新格式化以确保输出始终是相同的格式。
我的标识号始终遵循相同的格式:
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)。
这可能吗?
答案 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})$