正则表达式在`:`之前获取字符串直到多个空格

问题描述 投票:1回答:3

我们正在尝试从字符串中创建一个对象,而不是遵循任何正确的模式。

HP: (000)123-4567 AGE: 53 S:F^ 0001 S. Potomac DOB: 11/04/1900 LOC: E.ER ^ Aurora,CO 80088 PHYS: ISADE - jhghj,Devon Chase ^ PHONE #: 000-000-0000 EXAM DATE: 12/24/2017 STATUS: REG ER^ FAX #: 000-000-0000 A#: Eu67765765hh U#: E49857684957^ ^ PAGE 1

为了获得属性,我试图从冒号向后获取直到多个空格。

这就是我想出来的。

^(.*?)(?<=\:).*?(?=\:)

这从:读到:,即HP: (000)123-4567 AGE作为输出

但我需要将所有标题与他们的数据分开。

HP: (000)123-4567
AGE: 53
S: F^ 0001 S. Potomac 

任何帮助,将不胜感激

javascript node.js regex
3个回答
2
投票

这个正则表达式似乎适用于给定的样本(demo):

([^:]+):(.+?)(?=(?:[A-Z#]+ ?)+:|$)

它使用惰性量词和先行表达式的组合来分隔属性及其值。


1
投票

试试这个正则表达式:

((?:[A-Z]+\s*)*#?):\s*([\s\S]*?(?=$|\s+(?:[A-Z]+\s*)*#?:))

Click for Demo

说明:

  • ((?:[A-Z]+\s*)*#?) - 第1组包含0次出现(1次出现大写字母后跟0 +空格),然后是可选的#
  • :\s* - 匹配:跟随0+出现的空格
  • ([\s\S]*?(?=$|\s+(?:[A-Z]+\s*)*#?:)) - 包含字符序列的第2组,后跟字符串结尾或下一个属性名称(\s+(?:[A-Z]+\s*)*#?:

0
投票

这对你有用吗?

[a-zA-Z]*:([^:]*)\s?

demo

© www.soinside.com 2019 - 2024. All rights reserved.