Regex 从字符串中删除数字和错误字母
我试图解析一些信息(在Excel中使用VBA),删除数字和“相关字母”。不幸的是,就编程而言,我想不出多少简单的模式。然而,“看着它”,我可以看到我想在哪里切断数据 这是一个模拟的信息列表(每行是一个单元格): 期望输出:Regex 从字符串中删除数字和错误字母,regex,vba,Regex,Vba,我试图解析一些信息(在Excel中使用VBA),删除数字和“相关字母”。不幸的是,就编程而言,我想不出多少简单的模式。然而,“看着它”,我可以看到我想在哪里切断数据 这是一个模拟的信息列表(每行是一个单元格): 期望输出: Maersk Bentonville CRC Brooklyn Piraeus Seago Istanbul Maersk Bulan Buton Seago Bremerhaven One Seago Antwerp Captain Maersk Carsten Maers
Maersk Bentonville
CRC Brooklyn
Piraeus
Seago Istanbul
Maersk Bulan
Buton
Seago Bremerhaven One
Seago Antwerp
Captain Maersk
Carsten Maersk
Cecilie Vessel
Charlotte Maersk
我只是想知道名字(即马士基本顿维尔)。我没有可以比较的主列表,所以我只想删除“voy.”和数字/字母组,即183E
,298ER20
,等等
我可以通过以下函数非常接近:
Function RemoveNumbers(Txt As String) As String
With CreateObject("VBScript.RegExp")
.Global = True
.Pattern = "[0-9]|[-+./]+|(voy)"
RemoveNumbers = .Replace(Txt, "")
End With
End Function
但你会注意到它留给我的是Maersk Brooklyn E
,Maersk Bulan YH
我想我的问题是:有没有一种方法可以确定那个有数字的组中是否有字母?如果是这样的话,就把那群人除掉吧
我肯定有一个正则表达式模式,但我仍在学习正则表达式,所以还没有弄明白,但我很想找到一个
如果还有其他选择,我也愿意。当然,我可以循环遍历单元格中的每个字符,注意字母旁边出现的数字,然后开始跟踪到下一个空格,然后删除该组,但这似乎效率很低
谢谢你的建议,如果我能澄清什么,请告诉我
PS:我不能只是“剪切”最后一组文本。有时我有一个单元格,其中有三个我想保留的名称(
Seago Bremerhaven One
),有时我只有两个部分Maersk Ship
,Seago Antwerp
,或者Seago 29E2R
,使用字符串开头的锚^
,可以提取名称
正则表达式:^(?[A-Za-z]+\s)*
打开多行选项
说明:
^
将在行首开始匹配。
(?:[A-Za-z]+\s)*
将查找后跟空格的字符组合(假设名称中没有数字)。由于使用了*
量词,因此将多次搜索此模式。因此,在一行中匹配多个名称
请发布所需产品的清晰样品output@PedroLobito-补充,对不起@YowE3K-我知道我需要添加它,只是不想在问题中添加其他文本块,所以我只举了一个例子。但我知道:(@BruceWayne NP,它发生了。我想Rahul有你的答案。GLOoh-Close!输入
马士基船长1235N
,这将返回1235N
。我如何得到它的反面,马士基船长
?@BruceWayne:根据你的预期输出马士基船长
是匹配的。我如何得到它的反面,马士基船长艾恩?我不明白你的问题。@BruceWayne:哦!我现在明白了。你希望删除除名称以外的尾随数据!我为匹配名称编写了正则表达式。如果你能匹配,那就试试看。我不擅长VBA。在VBA中稍作调整,我就能够实现这一点。为了子孙后代:你提供的正则表达式将成功地抓住我想要的部分从字符串中删除。(Maersk Ship 0012E
变为0012E
。我只想要Maersk Ship
)。为了解决这个问题,我只使用Excel的SUBSTITUTE()
函数将regex找到的字符串替换为”
。我将继续玩这个,看看是否可以得到“反向”去工作,但是非常感谢你的帮助D@BruceWayne:很高兴能对你有所帮助╭^-^╮.
Function RemoveNumbers(Txt As String) As String
With CreateObject("VBScript.RegExp")
.Global = True
.Pattern = "[0-9]|[-+./]+|(voy)"
RemoveNumbers = .Replace(Txt, "")
End With
End Function