繁体   English   中英

使用正则表达式分组结构匹配字符串的各个部分

[英]Matching parts of string using regex grouping constructs

我有以下字符串格式:

CC-SS[PC|PC|...|PC]

哪里:

  • CC是国家/地区代码
  • SS是状态码
  • PC | PC | ...... PC是用竖线分隔的邮政编码字符串

字符串的右边部分可能不存在。 例如:

  • 我们
  • US-IL

是有效的字符串。

因此,我想使用正则表达式仅获取字符串的特定详细信息(如果存在)。

我尝试使用命名组和以下模式的一些变体:

^(?<country>.*)(?<=-)(?<state>.*)(?<=\[)(?<postalcodes>.*)(?=])

上面的模式有两个问题:

  • 首先,它仅适用于字符串的完整表示(较短的字符串不匹配)
  • 其次,我无法拒绝定界符( -[] )的匹配

通常,我使用正向或负向前/后方进行匹配,并匹配除定界符- [^.\\]]以外的所有内容,但是我不确定在匹配多个组时如何应用此技术。

任何人都可以建议我可以尝试的东西吗?

我想你可能会用

\b(?<country>[A-Z]{2})(?:-(?<state>[A-Z]{2}))?\b(?:\[(?<postalcodes>[^][]*)])?

在C#中:

var rx = new Regex(@"\b(?<country>[A-Z]{2})(?:-(?<state>[A-Z]{2}))?\b(?:\[(?<postalcodes>[^][]*)])?");

参见regex演示

细节

  • \\b单词边界
  • (?<country>[AZ]{2}) -组“ country”:两个大写ASCII字母
  • (?:-(?<state>[AZ]{2}))? -与1个或0个匹配项匹配的可选非捕获组
    • -连字符
    • (?<state>[AZ]{2}) -组“状态”:两个大写ASCII字母
  • \\b单词边界
  • (?:\\[(?<postalcodes>[^][]*)])? -与1个或0个匹配项匹配的可选非捕获组
    • \\[(?<postalcodes>[^][]*) -组“邮政编码”:0个或更多除[ ][
    • ] -一个]字符。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM