匹配可能存在或可能不存在的组

Mri*_*lla 10 regex oracle plsql

我的正则表达式需要解析一个如下所示的地址:

BLOOKKOKATU 20 A 773 00810 HELSINKI SUOMI
-------------------- ----- -------- -----
          1            2       3      4*
Run Code Online (Sandbox Code Playgroud)

第一组,第二组和第三组将始终存在于地址中.第4组可能不存在.我写了一个正则表达式,帮助我得到第一,第二和第三部分,但我还需要第四部分.第4部分是国家名称,可以是FINLANDSUOMI.如果第四部分不存在于地址中,则第四部分将为空.这是我的正则表达式到目前为止,但第三组也抓住了这个国家.有帮助吗?

(.*?)\s(\d{5})\s(.*)$
Run Code Online (Sandbox Code Playgroud)

(我将使用这个Oracles REGEXP功能)

Nor*_*ard 12

将正则表达式更改为:

(.*?)\s(\d{5})\s(.+?)\s?(FINLAND|SUOMI)?$
Run Code Online (Sandbox Code Playgroud)

使第三组没有贪心会让你匹配可选的空格+国家选择.如果第4组不匹配,我认为它将是未初始化而不是空白,这取决于语言.


Luk*_*nga 5

要匹配可能存在或不存在的字符(或在您的案例组中),您需要?在有问题的字符/子模式/类之后使用。我现在要回答,是因为RegEx很复杂,应该解释一下:仅发布没有答案的修订是不够的!

问号与零或前面的字符,类或子模式之一匹配。认为这是“上一项是可选的”。例如,因为“ u”是可选的,所以颜色匹配颜色和颜色。

以上引自http://www.autohotkey.com/docs/misc/RegEx-QuickRef.htm