3

我有类似于以下的文本(有意使用空格),我逐行运行 RegEx:

 Smith-Petersen                 X1l
Jonas Henry           
Foord. 82a                     221.
 12345 Somewhere 

我现在想使用 RegEx 在第一个匹配组中出现 3 个或更多空格(可能会或可能不会出现)之前捕获任何内容。允许的字符:

[a-zA-Z0-9,. '\-AÖÜäöüß]

我想要的是: Smith-Petersen,Jonas Henry和. 在拼命尝试之后,我希望在这里找到帮助......我只是无法让它发挥作用,因为我的表情抓住了空白以及接下来的内容并将其放入第一组。有没有办法扭转正则表达式的方式?谁能帮我这个?Foord. 82a12345 Somewhere

4

2 回答 2

4

假设“可能会或可能不会发生”,您的意思是该行可能会在遇到 3 个空格之前结束:

^\s*([-a-zA-Z0-9,\.'AÖÜäöüß ]+?)(?=\s{3}|\s{0,2}$)

此正则表达式使用正向预测来断言后面有 3 个空格,或者最多有 2 个空格然后输入结束。

输入开始的锚点避免匹配较长行末尾的垃圾。

你的目标在第 1 组。

在 rubular 上查看现场演示

于 2013-07-09T14:22:27.293 回答
1

这是我的方法。

^ *([a-zA-Z0-9,.'AÖÜäöüß-]+(?: {1,2}[a-zA-Z0-9,.'AÖÜäöüß-]+)*)

您想要的是匹配组 1。此正则表达式仅使用贪婪运算符,适用于示例文本中的所有四种情况。

基本上它匹配一行开头的所有单词,这些单词彼此之间的间隔不超过两个空格。一旦找到超过 2 个空格,则匹配完成。

于 2013-07-09T17:05:28.053 回答