正则表达式替换lastname,firstname中间首字母到电子邮件格式

时间:2014-02-14 05:13:47

标签: regex

需要一些帮助来创建正则表达式,例如:

Smith, John R 

并将其转换为

john.r.smith@gmail.com

4 个答案:

答案 0 :(得分:2)

您可以在regex中使用以下C++11

string s = "Smith, John R"; // to john.r.smith@gmail.com

const regex r("(.*), (.*) (.*)");  
const string fmt("$2.$3.$1@gmail.com");  

cout << regex_replace(s, r, fmt) << endl;  

注意:这将为您提供John.R.Smith@gmail.com,如果您需要john.r.smith@gmail.com,可能还需要将其更改为小写,这是一项非常简单的任务。

答案 1 :(得分:2)

由于没有指定语言,我在VIM中尝试过这种方法,并且效果很好。

%s/\v(\w*),\s*(\w*)\s*(\w)/\L\2.\L\3.\1@gmail.com/

附件是截图

enter image description here

答案 2 :(得分:1)

与之前的答案相同,但在Shell中:

echo "Smith, John R" | awk '{print tolower($0)}' | sed 's/\(.*\),\s\(.*\)\s\(.*\)/\2.\3.\1@gmail.com/g'
john.r.smith@gmail.com

其实感谢@ KP6,我意识到sed可以小写:) 因此,更简单的版本将是:

echo "Smith, John R" | sed 's/\(.*\),\s\(.*\)\s\(.*\)/\L\2.\L\3.\L\1@gmail.com/g'
john.r.smith@gmail.com

答案 3 :(得分:0)

抓住所需的令牌:

(.+?),\s(.+?)\s(.+)

$ 1是姓。

$ 2是名字

$ 3是中间名

现在建立您的电子邮件地址。

正如其他人所说,正则表达式似乎有点矫枉过正