尝试编写正则表达式,根据格式提取名字或姓氏或名字。
两种可能的格式是:
<Last name> / <first name>
或者:
<first name>
是否有一个正则表达式,我可以用它来提取(带有组)姓氏和名字,如果是第一种格式,或者只是第二种格式的第一个名字?
谢谢! 凯尔
答案 0 :(得分:0)
^(?:(.*)\/)?(.*)$
将第一个名称放入$ 2,将姓氏(如果存在)放入$ 1。
经过测试:
Smith/Mark
Mark
如果我误解了你的符号,请说出来。
答案 1 :(得分:0)
需要说明的是,Mark的上述RegEx也将匹配:&#34; 1234hjkbj324 re23jh23ghjbpizza&#34;或&#34; Mark / 342432bmnb&#34; ...
我建议不要使用此功能,因为您会收到一些意想不到的结果。另外,我不相信$ 1变量不会捕获整个文本行...所以这些捕获括号也不是完全可靠的。
试试这个RegEx;它更具体,应该给你更可预测的结果:
^([A-ZA-Z] + \ S * / \ S *) - ([A-ZA-Z] +)$
适用于:&#34; Smith / Mark&#34;,&#34; Mark / Smith&#34;,&#34; Smith / Mark&#34;,&#34; Mark / Smith&#34;, &#34; Tony / Pizzeria&#34;,&#34; Jimmy&#34; (它也将匹配&#34; jimmy&#34;,&#34; mark / smith&#34;以及其他不区分大小写的模式;这很容易改变)...你得到了图片。注意&#39; /&#39;两侧的空格。是可变的,RegEx说明了这一点。删除&#39; \ s&#39;之后的重复运算符(即&#39; *&#39;)。如果你不想要这种行为。 请注意,这不适用于:&#34; 23432hjkjh kjdhda8&#34;,&#34; 2134134 / Smith&#34;,&#34; 123412341/12341234&#34;等等。这种行为是故意的。
此外,如果您希望这适用于嵌入在较大文本文件中的名称而不是在单独的行中显示的名称,请替换&#39; \ b&#39;对于两个&#39; ^&#39;和&#39; $&#39;。或者尝试替换&#39; \&lt;&#39;为&#39; ^&#39;和&#39;&gt;&#39;为&#39; $&#39;。这将取决于您使用的RegEx引擎以及该引擎支持的内容。这些是PCRE(Perl兼容的正则表达式)。
如果其中任何一项不清楚或产生意外行为,请告诉我。祝好运。
答案 2 :(得分:0)
这个正则表达式模式将查找斜杠并捕获它之前的所有内容以及之后的所有内容:
([^ /] +)的 /(。)