具有特定模式的字符串分离公式

时间:2013-02-13 05:22:59

标签: excel excel-vba excel-formula vba

这是我工作中最糟糕的情况。我必须自动分离这组字符串,但只是不知道我应该使用哪个函数。这完全是困难的!我需要在Excel中为数据库工作的下一步分离字符串。

以下是数据示例:

要在A列中分隔的字符串 -

java-1.6.0-openjdk-1.6.0.0-1.21.b17.el6.x86_64
java-utils-1.6.0.0-1.el6.x386 
Java-1.7.0-openjdk-1.7.1-3.1.5
gdb-1.6-5.2.7.el6

成功分离后的字符串部分,在B C D E F G H I -

列中
#         name        #         Version    # OSLv # Architecture #
java # 1.6.0 #openjdk # 1.6.0.0 # 1.21.b17 # el6  # x86_64 #
java#  utils#         # 1.6.0.0 # 1         #el6_3 #x386  #
Java#       #         # 1.7.1   #   3.1.5  #      #      #
gdb #       #         # 1.6     #5.2.7     #el6   #      #

(在我看来,如果我们首先将字符串分成两部分,比如

java-1.6.0-openjdk-1.6.0.0-1.21.b17     #####     .el6.x86_64

然后分成特定部分将更容易......也许!?)

非常感谢您的帮助。

我会接受您可以提供给以后学习的任何解决方案:D

“#”标记表示将字符串部分分隔为不同的单元格。

2 个答案:

答案 0 :(得分:2)

以下公式不是一个完整的解决方案,但应该为您提供一个起点,让您了解您需要执行的字符串操作的类型:

从要解析的字符串的头部开始:

  =LEFT(A1,SEARCH("-",A1)-1)

  =IFERROR(MID(A1,LEN(A6)+2,SEARCH("-",A1,LEN(A6)+2)-LEN(A6)-2),"-")

  =IFERROR(MID(A1,LEN(A6&B6)+3,SEARCH("-",A1,LEN(A6&B6)+3)-LEN(A6&B6)-3),"-")

  =IFERROR(MID(A1,LEN(A6&B6&C6)+4,SEARCH("-",A1,LEN(A6&B6&C6)+5)-LEN(A6&B6&C6)-4),"-")

(我在字符串的中间留下了一些让你这样做。)

从要解析的字符串的尾部:

  =IFERROR(MID(A1,SEARCH("el",$A1),SEARCH("x",A1)-(SEARCH("el",A1)+1)),"-")

  =IFERROR(RIGHT(A1,LEN(A1)-SEARCH("x",A1)+1),"-")

字符串不具有相同数量的元素并且并非所有元素都用短划线(“ - ”)分隔的事实使得这比通常的字符串解析任务更复杂。当你遇到困难时,你应该回答一个更具体的问题。

答案 1 :(得分:2)

对于非常复杂的字符串提取,我很想在工作表函数中使用正则表达式。

请参阅http://excelicious.wordpress.com/code-samples/vba/regex-functions/了解可以使用/ on构建的库。