我正在开发一个Java项目,它可以获取基于位置的信息,并为用户提供相关信息。在处理此问题时,我在文本文件中获取信息,格式如下:
[loc.x.1234] has logged in. Connects to [loc.x.983]
[loc.x.3427] has left the room.
信息始终在方括号([])中,格式为(string.string.string)。
我的目标是从这些文件提要中提取用户信息。我的输出应该是以下格式:
loc.x.1234,loc.x.983
loc.x.3427
虽然我已经编程了几个月,但我并不熟悉使用正则表达式。对此有任何帮助表示赞赏。
答案 0 :(得分:2)
我确信很多人都会指出StackOverflow不是一个教程网站,所以请注意......
你应该了解正则表达式。我推荐Michael Fitzgerald的优秀Introducing Regular Expressions。
以下是使用正则表达式解决问题的方法:
\[(\w+)\.(\w+)\.(\w+)\]
让我们分解吧。首先,方括号是正则表达式中的元字符,这意味着它们具有特殊含义。由于我们要明确匹配方括号,我们必须转义它们(就像你必须在Java字符串中转义引号)。转义字符是反斜杠,因此此正则表达式匹配的第一件事是文字[
字符。
括号提供分组,通常有两个目的。首先,它们将子表达式分组,允许您构造更复杂的表达式。其次,它们提供了一种“记住”匹配的方式。在我们的例子中,我们用它来“记住”方括号内的三个字符串中的每一个。
然后,我们使用元字符\w
。这是“字母,数字和下划线”的正则表达式简写,这可能是你想要的情况。如果不这样做,还有其他选择。 (例如,如果你想匹配空格,你可以[\w\s]
,或者你可以说[^.\]
来匹配任何不是句号或近似方括号的东西。)
然后是+
,它是“一个或多个”的正则表达式字符。这意味着必须至少匹配一个单词字符,并且可能更多。如果您想要空字符串,请改用*
元字符,即“零或更多”。
在子字符串之间,我们必须逃避这段时间,因为它在正则表达式中具有特殊含义。
一旦你匹配这个正则表达式,对于每个匹配,你将得到三个组,一个用于你的三个字符串。
祝你好运,并在向StackOverflow提问之前尝试阅读一些教程。
答案 1 :(得分:2)
这可能会对您有所帮助:
String a="[loc.x.1234] has logged in. Connects to [loc.x.983]" +
"[loc.x.3427] has left the room.";
String regExp="(?<=\\[).*?(?=\\])";
Pattern p = Pattern.compile(regExp);
Matcher m = p.matcher(a);
while(m.find()){
System.out.println(m.group());
}
“(?&lt; = \ [)”和“(?= \])”丢弃“[”和“]”