正则表达式在逗号后选择每个首都

Regex selecting every capital after a comma

基本上,我试图通过从文件名中获取信息以生成将发送到的电子邮件来自动发送带有文件附件的电子邮件。我在整个网站上搜索过,但没有找到类似的东西,所以如果我重复提出问题,我很抱歉。我正在尝试在 Powershell 4.0

中执行此操作

我们的电子邮件格式是 firstinitialLASTNAME@company.com 所以对我来说是 jgetz@company.com

我被困在哪里:正则表达式 我创建了表达式 \b\w*(?=,) ,在名为 盖茨,雅各布 2017.9.4.pdf 将在 powershell 和 regexstorm.net 上获取姓氏,就像我需要的那样,但是当我尝试在逗号后获取任何大写字母时,我正在查找的备忘单并没有真正适用(这是因为有些人的名字像 Jo -安)。这正是我需要帮助的地方,我还没有完全了解 scripting/automation 来真正 google 或研究特定主题。 下面是我获取姓氏的方法我没有走得更远因为我只是改变了路径来构建这样的自动化并且我在描述的步骤挂断了。

$myFolder = 'C:\Users\jgetz\Desktop\Testfolder'

Foreach ($file in Get-ChildItem $myFolder)
{
  $myFile = $file.name
  $myFile2 = $myFile -Match "\b\w*(?=,)"
  $Matches.Values | Out-Host
}

首先将文件名拆分为 ,:

$filename = 'Getz, Jacob 2017.9.4.pdf'

# Split file name into two parts on first , 
$lastname,$rest = $filename -split ',',2

现在我们得到了姓氏的平方。然后使用 -creplace 运算符(replace 前面的 c 表示它 区分大小写 )从其余部分中删除任何非大写字符字符串的:

$firstinitials = $rest -creplace '[^\p{Lu}]'

\p{Lu} 是 "all unicode Letters, uppercase" 的 .NET 正则表达式。 [^\p{Lu}] 否定它。

现在您需要做的就是构造邮件地址:

$mailaddress = "$firstinitials$lastname@company.com"