我试图构建一个正则表达式来从数据中提取瑞典组织编号。这些数字可以是以下格式:
999999999999 // 12 digits, first two should be ignored.
9999999999 // 10 digits, all should be included.
99999999-9999 // 12 digits with a dash, first two digits and the dash should be ignored
999999-9999 // 10 digits with a dash, dash should be ignored.
对于12位数字的情况,前两位数字总是16,19或20.我目前的尝试是:
(?:16|19|20)?(\d{6}\-?\d{4})
这将返回$1
中的十位数组织编号,但如果存在,则会包含短划线。我希望删除破折号(或者如果缺少破折号可能会添加破折号),以便$1
具有相同的格式,无论输入中是破折号还是没有破折号。
正则表达式在一个配置中,将用在简单提取$1
的代码中,所以我无法在代码中解决这个问题 - 我需要正则表达式来实现它自己" 34。
作为最后的手段,我可以修改代码以允许config指定"替换字符串"除了搜索正则表达式之外,还有代码使用replace的结果作为提取的最终结果。在那种情况下,我可以使用它:
Regex: (?:16|19|20)?(\d{6})\-?(\d{4})
Replace string: $1$2
但是这会导致其他问题,因为对于其他配置项,正则表达式将返回多个"数据字段",每个捕获组一个。为了实现这一点,在这种情况下,我需要提供替换字符串的序列,例如对于标签分隔格式,中间有组织编号:
Regex: ([^\t]*)\t(?:16|19|20)?(\d{6})\-?(\d{4})\t([\d]*)
Replace string 1: $1 (free text field)
Replace string 2: $2-$3 (the organization number with dash "enforced")
Replace string 3: $4 (numeric field)
可行,但相当尴尬......那么,在搜索正则表达式中解决它的方法是什么?