我无法弄清楚这类数据的正确正则表达式:
电话 - 工作:1111111111电话 - 传真工作:222222222电话: (333)333-3333电子邮件::email@email.com
期望的结果是:
Col1 Col2 Col3
Phone Work 1111111111
Phone Fax Work 222222222
Phone General (333) 333-3333
Email null email@email.com
密钥由两部分组成(第二部分可能缺失):
Phone-Work:
,Email-:
可以有4种类型的密钥:Phone-
,Email-
,User ID-
,Web address-
我无法弄清楚如何创建一个将采用value
部分并在新key
之前停止的正则表达式。
以下是我正在尝试的一些数据:
答案 0 :(得分:4)
您可以使用
之类的解决方案(?si)(Phone|Email|User ID|Web address)-([^:]*):\s*((?:(?!(?:Phone|Email|User ID|Web address)-).)*)
相当于
(?si)(Phone|Email|User ID|Web address)-([^:]*):\s*(.*?)(?=(?:Phone|Email|User ID|Web address)-|$)
请参阅regex demo
<强>详情:
(Phone|Email|User ID|Web address)-
- 匹配可能的起始值,然后-
将其捕获到第1组([^:]*)
- 将:
以外的零个或多个字符捕获到第2组:\s*
- 冒号后跟零个或多个空格((?:(?!(?:Phone|Email|User ID|Web address)-).)*)
- 第3组捕获未启动与.
模式匹配的序列的任何字符((?:Phone|Email|User ID|Web address)-
)。 由于使用(?s)
修饰符,.
也会匹配换行符。在C#中,您可以使用RegexOptions.Singleline
标志而不是此内联选项。 (?i)
是RegexOptions.IgnoreCase
标志的内联等效项。组合时,内联修饰符可以写在一对括号内:(?si)
。
答案 1 :(得分:1)
也许这个是你的开始:
(.*?)-(.*?):\s*([- ()+\w@.]+)(?![-\w]*:)