2010-01-19 55 views
2

我试图创建一个正则表达式来标记一个字符串。一个示例字符串会是。RegEx到Tokenize字符串

John Mary, "Name=blah;Name=blahAgain" "Hand=1,2" 

我试图找回:

  • 约翰
  • 玛丽
  • 名称=等等;名称= blahAgain
  • 手= 1,2
+0

一个例子(没有任何进一步的说明)可能不够。 “Name = blah; Name = blahAgain”'里面可以有'''''可能不会,但是这并不会伤害到知道。'Name = blah; Name = blahAgain“'里面的空格呢?名字总是两个单独的名字吗?乔·埃伦·彼得,......(乔·埃伦和彼得)怎么样?仅举几例可能存在问题的案例 – 2010-01-19 19:45:47

回答

1

对于这个具体的例子,我会这样做:

([^\s]*)\s+([^,\s]*)\s*,\s*"([^"]*)"\s+"([^"]*)" 

更新:修改拆分玛丽和约翰

+0

感谢您的建议,但我是使用java中的扫描器类,它似乎并不喜欢它 – binarymelon 2010-01-19 18:46:15

+0

@slebetman:玛丽和约翰不会与你的正则表达式分开 – 2010-01-19 19:02:32

+0

这很奇怪,我很肯定上述是相当简单的老派正规表达式,没有任何怪异的PCRE或egrep东西你确定你已经用''''在java中逃脱了''' – slebetman 2010-01-19 19:03:00

1

这很容易:

([^ ])+ 
+0

这将得到玛丽以及逗号后的逗号。它也不会一次捕获所有需要的字段。 – ferdystschenko 2010-01-19 20:05:09

+0

实际上,它每次只捕获一个字符,除非你把'+'放入了隐含的内容。 – ferdystschenko 2010-01-19 20:07:47

0

由于您使用的Java,为什么不使用的StringTokenizer?例如: -

StringTokenizer st = new StringTokenizer("String to tokenize", " "); 
while (st.hasMoreTokens()) 
{ 
    // get next token 
    String someVariable = st.nextToken(); 
} 
0

这适用于你的例子:

(\w+) (\w+), \"([^"]+)" \"([^"]+) 

贵公司的所有字符串有完全相同的模式?

0

一种可能的方式:在拆分,后跟一个space或在spacequotation mark之一:

"John Mary, \"Name=blah;Name=blahAgain\" \"Hand=1,2\"".split(",\\s|[\\s\"]")