使用正则表达式在第一个逗号之前提取文本

Ива*_*вац 23 ruby regex

我想在第一个逗号(名字和姓氏)之前从字符串中提取文本,如:

John Smith, RN, BSN, MS
Thom Nev, MD
Foo Bar, MD,RN
Run Code Online (Sandbox Code Playgroud)

我尝试使用正则表达式:

(.*)\s(.*),\s
Run Code Online (Sandbox Code Playgroud)

但这并不适用于所有情况.怎么做到这一点?

rid*_*rid 64

匹配从字符串开头到第一个逗号的所有内容:

^(.+?),
Run Code Online (Sandbox Code Playgroud)

  • @ИванБишевац,`?`在这种情况下意味着[非贪婪](https://www.google.com/search?q=non+greedy+regular+expression).基本上它意味着表达式应该匹配所有内容,直到它遇到*first*`,`.没有`?`,它会寻找所有东西,直到*last*`,`.此外,`.+`表示"任何一个或多个字符",而不是"一个或零"."一个或零"是原子后的"?"(例如`ab?c`匹配`abc`或'ac`). (6认同)
  • 这包括逗号本身(至少当我在Sublime中尝试过时).以下选项对我有用:^([^,])+ (4认同)
  • 我知道 ^ 表示开头,.+ 表示任何字符的一个或零,但不知道 ? 的目的是什么。 (3认同)

aqu*_*nas 22

怎么样: yourString.split(",")[0]

  • 我接受了正则表达式的答案,因为我要求它并想学习正则表达式。无论如何很好的答案。来自我的 +1。 (2认同)
  • 它也可以是yourString.split(',') (2认同)

Ale*_*exG 15

^([^,])+
Run Code Online (Sandbox Code Playgroud)

这个正则表达式在 Sublime 中对我有用。它选择了第一个逗号之前的所有内容。

  • 这应该是公认的答案。OP要求逗号之前的所有内容,接受的答案包括逗号。 (3认同)

And*_*ark 6

怎么样:

[^,]*
Run Code Online (Sandbox Code Playgroud)

[^,]*意思是“匹配任意数量的不是逗号的字符”,我认为这正是您要在此处执行的操作。您可能希望将其锚定到字符串iwth的开头^,如下所示:

^[^,]*
Run Code Online (Sandbox Code Playgroud)


dan*_*rvt 6

你必须使用非贪婪的正则表达式运算符,尝试:(.+?),而不是:(.+),.请注意,使用贪婪的运算符时,您将匹配最后一个逗号而不是第一个逗号之前的所有内容.