[英]Matching parts of string using regex grouping constructs
我有以下字符串格式:
CC-SS[PC|PC|...|PC]
哪里:
字符串的右边部分可能不存在。 例如:
是有效的字符串。
因此,我想使用正则表达式仅获取字符串的特定详细信息(如果存在)。
我尝试使用命名组和以下模式的一些变体:
^(?<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.