我正在使用正则表达式来识别单词之间的单个空格,并将其替换为下划线。 1.例如,说F1的值为“公司名称机构名称”。 2.注意公司名称和机构名称之间的空格。 3.但是,两个字段之间用多个空格隔开
使用以下代码解决此问题。
DataSource.Factory
但是,这导致Value为“ y_name e_f_Institution”,在空格前需要1个字符。 我们如何更改代码以产生“ company_name Name_of_institution”
答案 0 :(得分:1)
在模式中,您使用(\w)+
。
我不确定细节,但是$1
仅保留该组的最后一次捕获(最后一个字母)。
尝试简单地使用(\w+)
。这会将完整的单词放入此捕获组,并使其重新出现在$1
。
答案 1 :(得分:0)
如果您很乐意避免使用Regex,那么此方法应该对您有用。
Public Sub RetrieveText()
Dim strText As String, strCompany As String, strInstitution As String
strText = "Company Name Name of Institution"
strCompany = Split(strText, " ")(0)
strInstitution = StrReverse(Split(StrReverse(strText), " ")(0))
Debug.Print strCompany
Debug.Print strInstitution
' ... or this ...
strCompany = Trim(Mid(strText, 1, InStr(1, strText, " ")))
strInstitution = Trim(Mid(strText, InStr(1, strText, " ")))
Debug.Print strCompany
Debug.Print strInstitution
End Sub
...这是另一种选择,至少可以简化它,至少对我有用。 :-)正则表达式功能强大,但很多人很难理解,可能要考虑到它的解决方案。
无论如何,由您决定!
答案 2 :(得分:0)
rx.Pattern = "(\w+) (?=\w)" ' match two or more spaces
rx.Global = True ' find all, not only the first match
t = rx.Replace(s, "$1_")
正在回答,其他正在寻找类似情况的人。