2012-06-15 208 views
0

如何从这个字符串切割部分的一部分......如何削减串

"abb.c.d+de.ee+f.xxx+qaa.+.,,s," 

...在那里我知道位置通过这样的:“”

结果总是之间(结果的左侧)和“+”(右侧)。 我知道数字“。”从左侧数字和从右侧数字“+”,来分隔结果字符串。

问题是右侧,因为我需要从末尾数“+”。

说...

从左侧:begining在五·四 “”
(这是容易),结果是=

"xxx+qaa.+.,,s," 

从右侧:端是在第二个 “+” 从端!

"xxx[here]+qaa.+.,,s," 

结果=

"xxx" 

我尝试用.substring和.indexOf要做到这一点我自己,但没有成功...

任何想法?谢谢

回答

0

你可以使用StrReverse函数扭转字符序列,然后从左侧计数+(使用相同的方法,计数.)的端部。

+0

没问题。 'StrReverse',我总是忘了这个。谢谢。 – ns27

0

要查找子字符串的开头,请从左侧循环显示字符串。计算你所看到的.的数量,当你点击你想要的数字时停止。将索引存储在一些变量中,如start

类似地找到子串的结尾,从右边循环并计数+ s。

0

您可以使用正则表达式解决这个问题:

Dim r As New Regex("^(.*\.){4}(?<value>.*)(\+.*){2}$") 
Dim m As Match = r.Match("abb.c.d+de.ee+f.xxx+qaa.+.,,s,") 
Dim result As String = m.Result("${value}") 

说明

  • ^表示字符串的开头
  • (.*\.){4}这意味着任何字符(.)重复任意次(*),然后是一段时间(\.)。这段时间必须使用反斜杠进行转义,否则时间段将是任意字符通配符。 .*\.包含在(){4}中,表示该模式必须重复四次。
  • (?<value>.*)这指定了我们之后的文本的占位符。 value是我们分配给它的名称。 .*指定该值是任意数量的任何字符。
  • (\+.*){2}这意味着一个加号(必须转义),后面跟着任意数量的任意字符,重复两次。
  • $指示串
+0

谢谢,但现在正则表达式对我来说太复杂了。一旦我将尝试学习.. – ns27

+0

没问题。你只能使用你理解的东西,这很好。这是一个糟糕的程序员的标志,他们只是复制并粘贴了一堆他们不明白的代码,然后让它工作。它最终无法很好地发挥作用。我自己对Regex的经验并不多,主要是因为还没有太多的需求,但我建议在某个时候适应它。它的优越性在于,您可以将所有逻辑存储为简单的字符串设置(如有必要)。而且,虽然阅读起来很难看,但写起来实际上比你期望的要容易得多。 –