我正在从.txt文件中读取行,并且我需要检查每行是否“有效”。
有效行以-2到2(含)之间的数字开头,然后是单个空格,然后是可能的文本。
我想为此使用正则表达式,但无法使其正常工作。我对正则表达式不熟悉。这是我的代码:
public static List<Sentence> readFile(String filename) {
List<Sentence> sentences = new LinkedList<>();
Pattern pattern = Pattern.compile("-[0-2] abc");
Matcher matcher;
try (BufferedReader br = new BufferedReader(new FileReader(filename))) {
while (br.ready()){
matcher = pattern.matcher(br.readLine());
if (matcher.matches()){
System.out.print("matches ");
}
}
} catch (IOException e){
e.printStackTrace();
}
return sentences;
}
这不起作用(没有惊奇)。有人可以帮我得到正确的正则表达式吗?
答案 0 :(得分:2)
您可能正在寻找类似于以下内容的正则表达式:
^(0|-?[1-2]) .*
^
符号匹配行的开头,(0|...)
匹配0
或以下表达式,-?
匹配0或1次出现的{{1} },-
匹配1或2,[1-2]
匹配空白,而匹配0或除换行符以外的其他任何内容。
答案 1 :(得分:0)
如果我没弄错您的问题,那么您将需要以下内容作为您的模式:
-?[0-2] \ s [\ w \ d \ s] *
尝试RegExr,它是一个非常好的基于Web的工具,用于确定正则表达式模式。
答案 2 :(得分:0)
如果测试字符串逐行分隔,则可以逐行验证测试字符串
foreach (string line in lines)
{
match = Regex.Match(line, @"^(-?[1-2]\s.*|0\s.*)", RegexOptions.IgnoreCase);
if (match.Success)
{
MessageBox.Show(match.Groups[1].Value);
}
}
它验证测试字符串,并捕获有效字符串。
如前所述,它仅在测试字符串由行分隔时才有效。
修改正则表达式以容纳由“ \ n”分隔的完整字符串
应该是
string regExp = @"(-?[1-2]\s.+[\n]{1}|(?<!-)0\s.+[\n]{1})";
MatchCollection matches = Regex.Matches(longstr, regExp, RegexOptions.IgnoreCase);
foreach(Match match in matches)
{
if (match.Success)
{
MessageBox.Show(match.Groups[1].Value);
}
}
有关全字符串的问题是,您不能再在表达式中应用^
或&
。
如果从表达式中删除了0 is not valid
,则会出现负匹配并从“ -0 is not valid
”捕获子字符串“ ^
”
因此,当后面的字符为(?<!-)
时,要求-
忽略0
作为第一个字符