将字符串拆分为具有特定模式和条件的部分
我有下面类似于某个应用程序输出的大约5k +字符串的数组(出于安全原因,我可能无法提供确切的数据,但示例格式非常类似于实际数据):将字符串拆分为具有特定模式和条件的部分
kasdfhkasdhfaskdfj42345sdsadkfdkfhasdf5345534askfhsad
asdfasdf66sdafsdfsdf4560sdfasdfasdf
sdfaasdfs96sadfasdf65459asdfasdf
sadfasdf8asdfasdas06666654asdfasdfsd
fasdjfsdjfhgasdf6456sadfasdfasdf9sdfasdfsadf
简单地说,我有由5份非间断的字母数字字符串:
[latin letters][1 or more digits][latin letters][1 or more digits][latin letters]
的字母部分长度,以及数字量是随机的,整体ST环长度可以从几个到2-3 数百的字符,但是模式仍然如上。
实际上我感兴趣的开头和结尾的字符串件,即[1 or more digits][latin letters][1 or more digits]
可能只是随意丢弃,而另外2个字符串应该被提取分离细胞。
我试过SUBSTITUTE
和SEARCH
功能,但我仍然可能不处理随机数字的数字。 VBA是最后期望的方法,但是如果纯粹的公式无用,则是可以接受的。此外,解决方案应该灵活,以便将来可能使用类似的模式 - 所以任何正确的指导/一般方法将不胜感激。
例程使用通配符。假设数据可以在Word中打开,请执行以下操作:
- 按CTRL + H^为替换对话框打开。
- 勾选
Use wildcards
选项。 - 您要丢弃的部分数据与以下模式匹配:
[0-9]{1,}*[0-9]{1,}
- 表示任何数字与任何字符之间的1次或更多次。根据您的区域设置,您需要;
而不是,
。 - 指定一个你喜欢的字符,例如
^t
(Tab)或;
- 用于进一步拆分零件。 - 执行更换。
- (可选)您可以使用功能区
Insert > Table > Convert Text to Table...
功能将其余转换为表格。
现在您只需要保存/粘贴获得的结果。
实际上,这种方法非常强大,许多类似于你的例行文本数据解析任务可能会很快完成,无需特殊技能和/或编程。而且你不需要任何第三方工具 - 现在每台PC都安装了Word。
了解更多关于模式和适用例:
该死的,但这是+1的棘手方法和简单性))) – 2013-02-14 18:06:51
@PeterL。谢谢!我使用这个例程来处理大量的数据数组,特别是对于一次性解决方案。 – 2013-02-14 18:19:55
@MaksGordeev这个建议很棒:简单,直观,如果需要可以进行宏编码。对于类似的1次解决方案来说绝对是必须做的。感谢您的好教程。 – Ksenia 2013-02-14 19:16:44
基于this tutorial从大chandoo(谁如果你想成为真棒在Excel中,应该遵循:
使用这个公式(注意数组公式,你需要进入它ENTER + SHIFT + CTRL)提取
{=MIN(IFERROR(FIND(lstNumbers,G6),""))}
其中lstNumbers是在与含有0-9(在一个小区中的每个数量的单元片材一个命名的范围)和E1包含数据的单元格。
这将retur n个第一数 ,然后你可以提取与第一部分:
=LEFT(E1,G1-1)
其中,e1包含数据和G1前面的公式
获得数字部分的使用端:
{=MAX(IFERROR(FIND(lstNumbers,E1),""))}
然后您可以使用mid来提取数值部分并使用len(datacell) - len(从max函数)来提取右边(或中间)剩下的字符串。我们将使用相同的处理方式 - 获取第一个分数,最后一个分配最大值等。
祝你好运!还有对于其中涉及内置Search and Replace
这样的任务非常简单的方法 - 这是一个真正hardone,与真正的编程语言,这样做会如果你不介意使用微软Word代替Excel中更容易也许
更新:
这个阵列式会给你第一串部分:
=LEFT(A1,MATCH(0,1*ISERROR(1*MID(A1,ROW(INDIRECT("$A1:$A"&LEN(A1))),1)),0)-1)
此数组公式会给你最后一个字符串部分:
=RIGHT(A1,MATCH(0,1*ISERROR(1*MID(A1,LEN(A1)+1-ROW(INDIRECT("$A1:$A"&LEN(A1))),1)),0)-1)
感谢您的另一个不错的选择! – Ksenia 2013-02-14 19:17:33
也许这将设置你在正确的轨道上:office.microsoft.com:从字母数字串中提取号码(HTTP://办公室。 microsoft.com/en-us/excel-help/extracting-numbers-from-alphanumeric-strings-HA001154901.aspx) – Tim 2013-02-14 17:37:11
@Tim感谢您的建议,请等待可能的答案时尝试。 – Ksenia 2013-02-14 17:42:33