我有很多这样的行:
John Smith
Jane Doe
Dr. Bruce Wayne
我想将这些名称放入一个包含两列的csv文件:title和full name。
我正在使用正则表达式:/(\w*\. )?(.*)/
,然后我打印"$1;$2"
。问题是,在没有标题的名称中,perl会抱怨未初始化的值为$ 1。如何使用空字符串?
答案 0 :(得分:7)
只需将正则表达式更改为:
my $re = qr/(\w*\. |)(.*)/;
add alternation --^
答案 1 :(得分:4)
一般情况下,如果需要,可以在(?: )
组中使用?刚用?如果省略捕获组将保留捕获变量undef,但您可以在捕获组内使用非捕获组:
/((?:\w*\. )?)(.*)/;
答案 2 :(得分:1)
要以另一种方式解决问题,Lingua-EN-NameParse可能有所帮助。