Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 从字符串中删除数字和错误字母_Regex_Vba - Fatal编程技术网

Regex 从字符串中删除数字和错误字母

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

我试图解析一些信息(在Excel中使用VBA),删除数字和“相关字母”。不幸的是,就编程而言,我想不出多少简单的模式。然而,“看着它”,我可以看到我想在哪里切断数据

这是一个模拟的信息列表(每行是一个单元格):

期望输出:

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