所以,我已经建立了一个正则表达式:
4!A2!A2!C [3!C]
被翻译为
这是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:可选字母(例如: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!
答案 0 :(得分:2)
您的正则表达式可以简化,并更正为允许H
之前的字符:
:32[^:]:.?([a-zA-Z]{6}\d[a-zA-Z]XXX)
所做的更改是:
.?
含义&#34;可选字符&#34; ([a-zA-Z]{4}[a-zA-Z]{2})
==&gt; [a-zA-Z]{6}
(4 + 2 = 6)[0-9]
==&gt; \d
(\d
表示&#34;任何数字&#34;)[X]{3}
==&gt; XXX
(只是更容易阅读和更少字符)比赛的第1组包含您的目标
答案 1 :(得分:0)
我不太确定我是否完全理解你的问题,因为你的正则表达式与你上面描述的完全不符。例如,您提到了3个可选字符,但在正则表达式中,您使用了3个必需的X-es。
但是,可以进一步清理实际的正则表达式:
总而言之 (?&LT; =:32 [^:]:)([A-ZA-Z] {6} [0-9] [A-ZA-Z] X {3}) 在相同的情况下更短,匹配。
如果您更好地描述域名,可能还需要进一步改进。