目前从某些.xlsx文件的名称中获取具有以下格式的名称:
依旧...... 我可以轻松地将名称与 - report - month year和-vp部分分开,并将它们放入LastName,Name格式。
我目前遇到的问题是,其中一些名称中会有破折号。例如Bob Smith-Jones这样的东西。
我是使用VBA和RegEx的新手,这是我用来在姓名LastName []中分隔名称的模式?[ - ] []?姓名LastName格式。< / p>
' Name LastName - Name LastName
objRegEx2.Pattern = "([a-zA-Z]*)[ ]([a-zA-Z]*)[ ]?[-]?[ ]?(([a-zA-Z]*)[ ]([a-zA-Z]*))?"
newFile = objRegEx2.Replace(newFile, "$2, $1, $5, $4")
'To remove ", , " when there is only one name
newFile = Replace(newFile, ", , ", "")
有没有办法让Bob Smith-Jones格式的名字变成Smith-Jones,Bob格式?目前他们最终采用Smith,BobJones格式
答案 0 :(得分:2)
你离我不远 - 你可以使用:
([a-zA-Z]+)[ ]([a-zA-Z\-]+)( \- )([a-zA-Z]+)[ ]([a-zA-Z\-]+)
请注意,您需要使用-
转义“LastName”部分中的\
,因为您可以看到-
是一个特殊的正则表达式字符。
要在名称之间获取,
,我将replace子句更新为"$2, $1 $3 $5, $4"
。
如果您想匹配Billy-Bob Smith
以及Bob Smith-Jones
等名称,可以将额外的\-
添加到模式的名字部分,如:
([a-zA-Z\-]+)[ ]([a-zA-Z\-]+)( \- )([a-zA-Z\-]+)[ ]([a-zA-Z\-]+)
测试代码(在Excel中):
Option Explicit
Sub Test()
Dim objRegex As Object
Dim strPattern As String
Dim strInput As String
Dim strOutput As String
strPattern = "([a-zA-Z\-]+)[ ]([a-zA-Z\-]+)( \- )([a-zA-Z\-]+)[ ]([a-zA-Z\-]+)"
Set objRegex = CreateObject("VBScript.RegExp")
objRegex.Pattern = strPattern
strInput = "Billy-Bob Smith - Terry Smith-Jones - July 2017"
strOutput = objRegex.Replace(strInput, "$2, $1 $3 $5, $4")
Debug.Print strOutput
End Sub
给出:
Smith, Billy-Bob - Smith-Jones, Terry - July 2017