正则表达式 - 命名组按模式进行多次匹配
Regex - named groups multiple match by patterns
下面是一个字符串模式,我想从中提取一些信息用于分析系统。
PRMS: {"load_numbers"=>"12345678", "shipper"=>"some-shipper", "app_id"=>"my_app_id", "timestamp"=>"20220502081520", "action"=>"index", "referencenumbers"=>["12342", "22342", "32323"]}
我想提取 app_id
、referencenumbers
、shipper
的值(=> & 引号之间的值)。我写了一个名为 REGEX101 来提取它们:
(?<loadnumbers>\"load_numbers\"=>\"*\"(.*?)\")|(?<appid>\"app_id\"=>\"([^\s]+)\")|(?<shipper>\"shipper\"=>\"(.*?)\")|(?<referenceNumbers>\"referenceNumbers\"|\"ReferenceNumbers\"=>\[(.*?)\])|(?<carrier>\"carrierName\"=>\"(.*?)\")|(?<trackingid>\"tracking_id|\"trackingid\"=>\"(.*?)\")
但是,这些值将进入带有键的命名组,并且这些值会移动到下一个组。请注意,并非所有值都在给定字符串中,仅提取可用的值。大多数情况下,值的出现顺序是相同的。我该如何解决这个问题?
您需要将组名放在实际捕获值的位置,例如:
(?:\"load_numbers\"=>\"*\"(?<loadnumbers>[^\"]*)\")
您的完整正则表达式(经过一些简化和优化)然后变为:
(?:\"load_numbers\"=>\"*\"(?<loadnumbers>[^\"]*)\")|
(?:\"app_?id\"=>\"(?<appid>\S+)\")|
(?:\"shipper\"=>\"(?<shipper>[^\"]*)\")|
(?:\"[Rr]eference[nN]umbers\"=>\[(?<referenceNumbers>[^]]*)\])|
(?:\"carrierName\"=>\"(?<carrier>[^\"]*)\")|
(?:\"tracking_?id\"=>\"(?<trackingid>[^\"]*)\")
下面是一个字符串模式,我想从中提取一些信息用于分析系统。
PRMS: {"load_numbers"=>"12345678", "shipper"=>"some-shipper", "app_id"=>"my_app_id", "timestamp"=>"20220502081520", "action"=>"index", "referencenumbers"=>["12342", "22342", "32323"]}
我想提取 app_id
、referencenumbers
、shipper
的值(=> & 引号之间的值)。我写了一个名为 REGEX101 来提取它们:
(?<loadnumbers>\"load_numbers\"=>\"*\"(.*?)\")|(?<appid>\"app_id\"=>\"([^\s]+)\")|(?<shipper>\"shipper\"=>\"(.*?)\")|(?<referenceNumbers>\"referenceNumbers\"|\"ReferenceNumbers\"=>\[(.*?)\])|(?<carrier>\"carrierName\"=>\"(.*?)\")|(?<trackingid>\"tracking_id|\"trackingid\"=>\"(.*?)\")
但是,这些值将进入带有键的命名组,并且这些值会移动到下一个组。请注意,并非所有值都在给定字符串中,仅提取可用的值。大多数情况下,值的出现顺序是相同的。我该如何解决这个问题?
您需要将组名放在实际捕获值的位置,例如:
(?:\"load_numbers\"=>\"*\"(?<loadnumbers>[^\"]*)\")
您的完整正则表达式(经过一些简化和优化)然后变为:
(?:\"load_numbers\"=>\"*\"(?<loadnumbers>[^\"]*)\")|
(?:\"app_?id\"=>\"(?<appid>\S+)\")|
(?:\"shipper\"=>\"(?<shipper>[^\"]*)\")|
(?:\"[Rr]eference[nN]umbers\"=>\[(?<referenceNumbers>[^]]*)\])|
(?:\"carrierName\"=>\"(?<carrier>[^\"]*)\")|
(?:\"tracking_?id\"=>\"(?<trackingid>[^\"]*)\")