正则表达式:可能包含空格和尾随字符。

3

我有类似以下文本(意图空格),我逐行运行正则表达式:

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

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

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

我想要的是:史密斯-彼得森乔纳斯·亨利弗德。82a某个地方12345号。 我已经拼命尝试了,希望在这里找到帮助... 我无法让它工作,因为我的表达式会抓住空格和后面的内容,并将其放入第一组中。 有没有一种逆转RegEx的方法? 有谁能帮我解决这个问题?
2个回答

4
假设“可能发生或可能不发生”指的是在遇到3个空格之前行可能会结束:
^\s*([-a-zA-Z0-9,\.'AÖÜäöüß ]+?)(?=\s{3}|\s{0,2}$)

这个正则表达式使用了正向预查来断言后面要么有3个空格,要么有最多2个空格然后直到输入结束。

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

你的目标在第1组中。

rubular上查看实时演示


现在比我的好多了 :) - Tim Pietzcker
2
我在 .Net 中测试了这个,似乎范围 {,2} 在那里不起作用。我不得不将其更改为 {0,2} 才能使其正常工作。根据 OP 使用的正则表达式引擎,他可能需要记住这一点。 - Francis Gagnon
好的,.Net 也可以,谢谢信息!我回到办公室后会尝试一下。 - Sebastian Edelmeier

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

你想要的在匹配组1中。这个正则表达式只使用贪婪运算符,在你的示例文本中适用于所有四种情况。基本上,它匹配每行开头的所有单词,这些单词之间最多相隔两个空格。一旦发现超过2个空格,匹配就完成了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接