【发布时间】:2014-04-16 13:27:09
【问题描述】:
所以,我构建了一个正则表达式,如下所示:
4!a2!a2!c[3!c]
翻译成
- 4 个字母字符后跟
- 2 个字母字符后跟
- 2 个字符后跟
- 3 个可选字符
这是 SWIFT BIC 代码 HSBCGB2LXXX 的标准格式
我的正则表达式将其从字符串中提取出来是:
(?<=:32[^:]:)(([a-zA-Z]{4}[a-zA-Z]{2})[0-9][a-zA-Z]{1}[X]{3})
现在这是针对特定标签 (32) 并且有效,但是,我不确定它是否是最干净的,而且如果在 H 之前有任何字符,那么它会失败。
匹配的字符串是:
:32B:HsBfGB4LXXXHELLO
以下返回HSBCGB4LXXX,但是这个:
:32B:2HsBfGB4LXXXHELLO
什么都不返回。
编辑
为了清楚起见。我有一个包含多行的字符串,所有行都以 :2xnumber:optional 字母开头(例如 :58A :) 我想指定一行开始匹配并从该行的任何位置返回一个 BIC。
编辑 更多示例数据可以提供帮助:
:20:ABCDERF Z
:23B:CRED
:32A:140310AUD2120,
:33B:AUD2120,
:50K:/111222333
Mr Bank of Dad
Dads house
England
:52D:/DBEL02010987654321
address 1
address 2
:53B:/HSBCGB2LXXX
:57A://AU124040
AREFERENCE
:59:/44556677
A line which HSBCGB2LXXX contains a BIC
:70:Another line of data
:71A:Even more
好的,所以我需要将标签 53 或 59 作为变量传入并仅返回 BIC HSBCGB2LXXX!
【问题讨论】:
-
不清楚你为什么在这里使用冒号和lookbehind。
-
您的第二个字符串在冒号后有一个数字,但只允许使用字母。
-
在输入
:32B:HsBfGB4LXXXHELLO中找不到来自第一个输入HSBCGB4LXXX的匹配项。请更正您问题中的错字。 -
@Barmar 我试图迎合 H 之前的任何字符/数字
-
@anubhava,我正在处理我现有的模式,并试图适应它。也许这不是最好的方法,因此我发布了。