Regex 序列号的正则表达式

Regex 序列号的正则表达式,regex,nsregularexpression,Regex,Nsregularexpression,我有一个很长的有效载荷,我需要从中返回一个序列号,但是它有很多序列号,我只想在某个标签之后返回序列号。这是有效载荷: USB: USB 2.0 SuperSpeed Bus: Host Controller Location: Building Internal Card Reader: Product ID: 0x8406 Serial Number: 000000000820 //i dont want this Building: Y

我有一个很长的有效载荷,我需要从中返回一个序列号,但是它有很多序列号,我只想在某个标签之后返回序列号。这是有效载荷:

USB:

USB 2.0 SuperSpeed Bus:

  Host Controller Location: Building

    Internal Card Reader:

      Product ID: 0x8406
      Serial Number: 000000000820 //i dont want this
      Building: Yes

USB 2.0 Bus:

  PCI ID: 0x8c31 


    iPhone:

      Vendor ID: 0x05ac  (skyway Inc.)
      Version: 7.02
      Serial Number: wea0aa752ada7722ac92575e98z2e89c691f4282 //i want this
      Speed: Up to 492 Mb/sec
      REC ID: 0x11100000 / 1

    skyway Internal Keyboard / Trackpad:

      Product ID: 0x0162
      Recog ID: 0x05ac  (skyway Inc.)
      Location ID: 0x14c00000 / 3
      Current Available (mA): 500
      Built-In: Yes
如何构建只返回以下内容的正则表达式:

wea0aa752ada7722ac92575e98z2e89c691f4282
我尝试执行以下操作,但这将返回以序列号开头的所有表达式:

Serial Number: [0-9]
我只想要iPhone标题后面显示的序列号

使用捕获组

"(?s)\\biPhone:\\n\\n+(?:(?!\\n\\n).)+\\bSerial Number: (\\w+)"

试试这个,抓住第一组,看演示


请注意,他想要在“iPhone”之后的序列号,我正在尝试,但它不起作用。如果你去我在rubular.com未定义的组选项中得到这个错误,它对你有用吗。rubular是专为ruby创建的,它不支持s修饰符。在这种情况下,您可以使用
\biPhone:\n\n+(?:(?!\n\n)[\s\s])+?\b序列号:(\w+)
awesome,但是仍然可以从正则表达式本身获取第一个组。@j2emanue只有一个组存在。。对此语言不太了解:(@vks不需要为什么?
(?:(?!\\n\\n)。)+
声明中间不存在任何空行。但在这种情况下,您的失败。因此,这将匹配iphone旁边段落中的字符串
序列号
。@AvinashRaj它根本不是必需的……OP只需要iphone后面的序列号……对其进行数据处理……您正在使其过度复杂化奥马特对我来说似乎很固定
\\biPhone:[\\s\\S]*?\\bSerial Number: (\\w+)
for (NSTextCheckingResult *match in matches) {
//NSRange matchRange = [match range];
NSRange matchRange = [match rangeAtIndex:1];
NSString *matchString = [htmlString substringWithRange:matchRange];
NSLog(@"%@", matchString);
}