首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使用正则表达式匹配测验模式的Java

使用正则表达式匹配测验模式的Java
EN

Stack Overflow用户
提问于 2013-07-12 02:32:24
回答 4查看 853关注 0票数 1

我正在尝试做100个巨型项目中的一个。其中之一是关于一个测验制作程序,它解析一个测验问题文件,随机挑选其中的一些,创建一个测验,并对测验评分。

我试图做的是简单地加载测验问题并逐个解析出来(即一个问题及其多项选择答案作为一个实体)。

测验的形式如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Intro to Computer Science


    1. Which of the following accesses a variable in structure b?
    A. b->var
    B. b.var
    C. b-var
    D. b>var

    2. Which of the following accesses a variable in a pointer to a structure, *b?
    A. b->var
    B. b.var
    C. b-var
    D. b>var

    3. Which of the following is a properly defined struct?
    A. struct {int a;}
    B. struct a_struct {int a;}
    C. struct a_struct int a
    D. struct a_struct {int a;}

    4. Which properly declares a variable of struct foo?
    A. struct foo
    B. foo var
    C. foo
    D. int foo

当然,这些问题有很多,但它们都在相同的format.Now中,我使用BufferedReader将这些问题加载到一个字符串中,并尝试使用正则表达式来解析它们。但我无法在任何特定的部分匹配。下面是我的代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    package myPackage;
    import java.io.*;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;

public class QuizMaker {

    public static void main(String args[])
    {


        String file = "myfile/QuizQuestions.txt";
        StringBuilder quizLine = new StringBuilder();
        String line = null;

        try {
            FileReader reader = new FileReader(file);

            BufferedReader buffreader = new BufferedReader(reader);



            while ((line = buffreader.readLine()) != null)
            {
                quizLine.append(line);
                quizLine.append("\n");
            }

            buffreader.close();

        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
          catch (IOException e1) {

              e1.printStackTrace();
        }


        System.out.println(quizLine.toString());


        Pattern pattern = Pattern.compile("^[0-9]{1}.+\\?");
        Matcher matcher = pattern.matcher(quizLine.toString());

        boolean didmatch = matcher.lookingAt();
        System.out.println(didmatch);

        String mystring = quizLine.toString();

        int start = matcher.start();
        int end = matcher.end();

        System.out.println(start + " " + end);

        char a = mystring.charAt(0);
        char b = mystring.charAt(6);

        System.out.println(a + " " + b);



    }



}

在这一点上,我只是简单地尝试匹配问题本身,并留下多项选择题答案,直到我解决了这一部分。是不是因为我的正则表达式模式错了?我甚至试图匹配一个简单的数字本身,甚至失败了(通过"^0-9{1}")。

我是不是做错了什么?我遇到的另一个问题是,这只是返回一个匹配,而不是所有匹配。您将如何遍历字符串以查找所有匹配项?任何帮助都将不胜感激。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-07-12 03:04:03

如果你使用的是String.matches(),你只需要一小部分你正在尝试使用的代码。

要测试某行是否为问题,请执行以下操作:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if (line.matches("\\s*\\d\\..*"))

要测试一行是否为答案,请执行以下操作:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if (line.matches("\\s*[A-Z]\\..*"))
票数 1
EN

Stack Overflow用户

发布于 2013-07-12 02:54:59

我个人不会使用正则表达式,我只会在\n上使用StringTokenizer,并且只检查第一个字符是否是数字(因为似乎没有其他行是以数字开头的)。

而是更具体地回答你的问题。您需要在您的模式中为^和$指定多行标志,以匹配行首和行尾。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Pattern pattern = Pattern.compile("^[0-9]{1}.+\\?", Pattern.MULTILINE);

这应该允许您的模式匹配文本中的行。否则^和$只是将字符串的开头和结尾作为一个整体进行匹配。

票数 1
EN

Stack Overflow用户

发布于 2013-07-12 03:02:05

描述

该表达式将捕获整个问题,然后是所有可能的答案,前提是字符串的格式与示例文本大致相同

^\s*(\d+\.\s+.*?)(?=[\r\n]+^\s*\d+\.|\Z)

示例

现场示例:http://www.rubular.com/r/dcetgPsz5w

给定示例文本的

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Intro to Computer Science


    1. Which of the following accesses a variable in structure b?
    A. b->var
    B. b.var
    C. b-var
    D. b>var

    2. Which of the following accesses a variable in a pointer to a structure, *b?
    A. b->var
    B. b.var
    C. b-var
    D. b>var



    3. Which of the following is a properly defined struct?
    A. struct {int a;}
    B. struct a_struct {int a;}
    C. struct a_struct int a
    D. struct a_struct {int a;}

    4. Which properly declares a variable of struct foo?
    A. struct foo
    B. foo var
    C. foo
    D. int foo

捕获组1与匹配

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[0] => 1. Which of the following accesses a variable in structure b?
A. b->var
B. b.var
C. b-var
D. b>var
[1] => 2. Which of the following accesses a variable in a pointer to a structure, *b?
A. b->var
B. b.var
C. b-var
D. b>var
[2] => 3. Which of the following is a properly defined struct?
A. struct {int a;}
B. struct a_struct {int a;}
C. struct a_struct int a
D. struct a_struct {int a;}
[3] => 4. Which properly declares a variable of struct foo?
A. struct foo
B. foo var
C. foo
D. int foo
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17606624

复制
相关文章
Perl正则表达式 模式匹配[通俗易懂]
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/142836.html原文链接:https://javaforall.cn
全栈程序员站长
2022/08/25
1.4K0
Java正则表达式匹配日期及基本使用
在 Java 中,\\ 表示:我要插入一个正则表达式的反斜线,所以其后的字符具有特殊的意义。
AlbertYang
2020/09/08
5.5K0
Java 14 instanceof 的模式匹配
本文是 Java 14 系列教程的其中一篇,本文主要讲述 InstanceOf 的模式匹配。
明明如月学长
2021/08/31
9220
正则表达式 - 简单模式匹配
        这里所用文本是《学习正则表达式》这本书带的,是《抒情歌谣集》(Lyrical Ballads, London, J.&A. Arch, 1798)中收录的塞缪尔·泰勒·柯勒律治的一首诗“The Rime of the Ancient” 的前几行。为了演示正则表达式的单行模式与多行模式,特意生成了带有换行符(ascii 10)的单个行,和不带换行符的多个行。
用户1148526
2023/05/01
8010
正则表达式 - 简单模式匹配
Java匹配中文的正则表达式
[\u4E00-\u9FA5]汉字﹐[\uFE30-\uFFA0]全角字符 [\u4E00-\u9FA5]汉字﹐[\uFE30-\uFFA0]全角字符所以说 ,Java的正则表达式是可以匹配中文字符的,同时,用中文字符来写表达式也是可以的.
大师级码师
2021/10/29
2.2K0
PHP中的正则表达式及模式匹配
PHP中对于正则处理文本提供了两种方式,一种是PCRE方式(PCRE库是一个实现了与perl 5在语法和语义上略有差异(详见下文)的正则表达式模式匹配功能的函数集. 当前的实现对应于perl 5.005.);另一个是POSIX方式。
大江小浪
2018/07/25
2.9K0
Java正则匹配空格_js正则表达式匹配空格
针对tab键带来的多个空格问题,有时候我们针对带空格的一行数据要进行切割,如果有多个空格就会出现就会切割空格出现,我们想把空格都去掉,所以需要用到某些方法。
全栈程序员站长
2022/11/09
11.1K0
Java 正则表达式匹配xml节点
xml内容: <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3
小贝壳
2020/03/05
1.3K0
MySQL实践精华:sql正则表达式模式匹配
一个会写诗的程序员
2022/01/07
1K0
MySQL实践精华:sql正则表达式模式匹配
[Python]Python中使用正则表达式匹配
必须加# encoding: utf-8否则报错 SyntaxError: Non-ASCII character '\xe6' # encoding: utf-8 import re regex= ur"\d{4}" #正则表达式 if re.match(regex,"2020-2-02"): print 111 else: print 222 返回111
唯一Chat
2020/02/24
6070
scala 模式匹配的几个模式
Scala 的模式匹配是类似与正则匹配的的模式匹配,但是不仅仅如此,它还可以匹配对象的内在的构建形式.
Tim在路上
2020/08/04
1.2K0
模式匹配
如果在不设置全文搜索的情况下,如何过滤查询结果,您会选择哪种方法?LIKE也许是最容易想到的:
yzsDBA
2021/02/03
9810
Scala 的模式匹配
最近开始学习 Scala,相较于学习 Haskell 的过程来看,Scala 真是直观得多,友好得多,更容易上手。以前写过关于从熟悉的 Java 和 JavaScript 来逐步学习 Groovy 和 Haskell 的文章,这以后再来学习 Scala 的话,就可以不断比较了。如果和我一样有 Java 经验的话但是从来没有接触过 Scala 的话,建议先阅读这篇文章,A Scala Tutorial for Java Programmers,一边比较,一边熟悉,同时配套的还有这个,Scala for Java programmers – Joakim Ohlrogge & Enno Runne,Youtube 上的视频,很直观,然后再从 Scala 官网的文档上面逐步涉入。
四火
2022/07/19
9870
Scala 的模式匹配
模式匹配
匹配操作符(绑定操作符): =~、!~ =~检验匹配是否成功:result= var =~ /abc/;若在该字符串中找到了该模式,则返回非零值,即true,不匹配则返回false。
生信补给站
2020/08/06
1.7K0
正则表达式在密码强度匹配中的使用
  今天领导让我写几个正则表达式来对密码做强度验证,听到写正则表达式内心是这样的感觉(哈哈,三分钟搞定,今天又可以打鱼了)。需求如下:密码组成只能是数字,字母,英文可见半角符号,然后需要如下4个表达式:
用户2038589
2018/09/06
4K0
Java正则表达式匹配AABB、ABAB格式字符
我们开发过程中,经常用到正则表达式来匹配想要的字符串,或者从一段文本中提取想要的关键字,比如爬虫应用等。正则表达式是对字符串提取的一套规则,我们把这个规则用正则里面的特定语法表达出来,去匹配满足这个规则的字符串。正则表达式具有通用型,不仅java里面可以用,其他的语言也一样适用。
用户8236825
2023/03/27
8600
Emoji 的处理 - 使用正则表达式匹配所有 Emoji
遇到了 emoji 需要过滤的问题,而百度来百度去看到的文章基本都是老旧的,没有完整给出 emoji 的 Unicode 范围
子润先生
2021/06/09
10.1K0
JavaScript正则表达式的模式匹配教程,并且附带充足的实战代码
其实我写这篇文章的话,主要是想自己重新复习一遍正则表达式。我们也知道正则表达式在很多语言中都是通用的,所以学好这个好处很多。接下来,就跟我一起来学习一下正则表达式,从0到入门吧。
@零一
2021/01/29
1.4K0
正则表达式匹配
该文讲述了如何用正则表达式匹配包括‘.’和‘*’在内的正则表达式。‘.’表示任意一个字符,而‘*’表示它前面的字符可以出现任意次(包含0次)。该算法利用动态规划的思想,结合字符串和模式的特点,进行匹配。
用户1148830
2018/01/03
1.6K0
[剑指offer] 正则表达式匹配
请实现一个函数用来匹配包括’.’和’*’的正则表达式。模式中的字符’.’表示任意一个字符,而’*’表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串”aaa”与模式”a.a”和”ab*ac*a”匹配,但是与”aa.a”和”ab*a”均不匹配
尾尾部落
2018/09/04
1.3K0

相似问题

使用模式和匹配的Java正则表达式

34

java中使用正则表达式的模式匹配

20

Java正则表达式模式匹配

21

Java正则表达式模式匹配

12

正则表达式模式匹配java

21
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文