正则表达式在Java中使用特定模式拆分字符串
我正在为包含以下字符串模式的文件编写解析器:
Key : value
Key : value
Key : value
etc...
我能够将这些行一行一行地检索到列表中。我想做的是将这些字符串中的每一个的键与值分开。我知道有split()
方法可以接受正则表达式并为我执行此操作,但我对它们非常陌生,因此我不知道将哪个正则表达式作为split()
函数的参数
此外,虽然不在我正在解析的文件规范中,但我希望该正则表达式也能够识别以下模式(如果可能):
Key: value
Key :value
Key:value
etc...
所以基本上,不管在:
字符之后/之前/之后和之前是否有空格,我希望正则表达式能够检测到它。什么是可以实现这一点的正则表达式
# 1 楼答案
换句话说
split
方法应该查找:
和它之前或之后的零个或多个空格在这种情况下
split("\\s*:\\s*")
应该可以做到这一点说明:
\\s
表示任何空格*
表示前面描述的元素的一次或多次出现\\s*
表示零个或多个空格李>另一方面,您可能还希望找到整个
key:value
对,并将匹配key
和value
的部分放在单独的组中(您甚至可以使用(?<groupName>regex)
随意命名组)。那样的话,你可以用# 2 楼答案
对于纯正则表达式解决方案,可以使用以下模式(注意开头的空格):
见http://regexr.com/39evh
# 3 楼答案
# 4 楼答案
如果要使用
String.split()
,可以使用以下命令:这将在“:”处拆分字符串,但在“:”前面添加所有空格,这样您将收到一个经过修剪的字符串
说明:
\\s*
将匹配任何空格,默认情况下这等于[ \\n\\r\\t]*
\\s*
之间的:
表示您的:需要在那里请注意,如果输入行不包含定义的键值格式,则此解决方案将导致
ArrayIndexOutOfBoundsException
如果您不确定该行是否真的包含键值字符串,可能是因为您希望在文件末尾像通常那样有一个空行,您可以这样做:
说明:
\\S+
匹配任何非空白字符串-如果它包含空白,则正则表达式的下一部分将与此表达式匹配。请注意,它周围的()标记,以便您可以通过m.group()
获得它的值李>\\s*
将匹配任何空格,默认情况下这等于[ \\n\\r\\t]*
\\s*
之间的:
表示您的:需要在那里.+
将匹配任何字符串,包括空格等李># 5 楼答案
您可以使用split方法,但可以将分隔符传递为“:”
这会在看到“:”时分割字符串,然后可以修剪值以获得键和值
您还可以使用regex来简化它
s.trim()将删除字符串前后的空格(如果您的案例中有空格),因此sting将变成“keys:value”并
使用表示空格(一个或多个):空格(一个或多个)作为分隔符的正则表达式拆分字符串