我想在许多字符之一上分割一个句子(下面列出).我的正则表达式能够根据大多数字符进行拆分,但不能在'[',']'(打开和关闭方括号)上进行拆分.如果我将字符串SPECIAL_CHARACTERS_REGEX更改为[ :;'=\\()!-\\[\\]]
,它将开始拆分字符串中的整数,而不是拆分方括号.如何将正则表达式分割为方括号而不是整数('[]'表示所有整数).
另一个相关的问题,是否还有一种方法可以从字符串中拆分数字?例如9pm
应该分成9
和pm
.
This: private static final String SPECIAL_CHARACTERS_REGEX = "[ :;'=\\()!-]"; String rawMessage = "let's meet tomorrow at 9:30p? 7-8pm? i=you go (no Go!) [to do !]" String[] tokens = rawMessage.split(SPECIAL_CHARACTERS_REGEX); Gives: Input: let's meet tomorrow at 9:30p? 7-8pm? i=you go (no Go!) [to do !] output: [let, s, meet, tomorrow, at, 9, 30p?, 7, 8pm?, i, you, go, , no, Go, , , [to, do, , ]]
和,
This: private static final String SPECIAL_CHARACTERS_REGEX = "[ :;'=\\()!-\\[\\]]"; String rawMessage = "let's meet tomorrow at 9:30p? 7-8pm? i=you go (no Go!) [to do !]" String[] tokens = rawMessage.split(SPECIAL_CHARACTERS_REGEX); Gives: let's meet tomorrow at 9:30p? 7-8pm? i=you go (no Go!) [to do !] [let, s, meet, tomorrow, at, , , , , p, , , , , pm, , i, you, go, , no, , o, , , , to, do]
预期产量:
{"let", "s", "meet", "tomorrow", "at", "9", "30", "p", "7", "8", "pm", "i", "you", "go", "no", "Go", "to", "do"}
Jerry.. 5
将破折号放在最后(或开始或转义它),否则,它将被视为一系列字符:
[ :;'=\\()!\\[\\]-]
您的原始的正则表达式匹配是之间的所有字符!
和[
包括数字,字母块和一束其它符号如(
,)
等等.
要获得您期望的结果,您可能会使用以下内容:
[ ?:;'=\\()!\\[\\]-]+|(?<=\\d)(?=\\D)
(?<=\d)(?=\D)
是分开数字和非数字(或者您可能也想使用[0-9]
,[^0-9]
哪些应该更有效/更快)
ideone演示
将破折号放在最后(或开始或转义它),否则,它将被视为一系列字符:
[ :;'=\\()!\\[\\]-]
您的原始的正则表达式匹配是之间的所有字符!
和[
包括数字,字母块和一束其它符号如(
,)
等等.
要获得您期望的结果,您可能会使用以下内容:
[ ?:;'=\\()!\\[\\]-]+|(?<=\\d)(?=\\D)
(?<=\d)(?=\D)
是分开数字和非数字(或者您可能也想使用[0-9]
,[^0-9]
哪些应该更有效/更快)
ideone演示