使用Regex提取子字符串,但如果字符串与Regex不匹配,则保留它

时间:2013-09-20 16:47:30

标签: java regex

对于这里的大师来说,它可能听起来像另一个简单的正则表达式,但它现在让我头脑疼痛:)

我的问题是,我有一组数据,我想摆脱'名字'。

  1. 姓名问题例如。约翰的问题,鲍勃的问题
  2. 信息 - 姓名例如信息 - 朱莉,信息 - 理查德,信息 - 大卫
  3. 选择
  4. 提交
  5. 正如我们所看到的,“姓名”仅存在于几个记录中,而不存在于其他记录中。

    我创建了两个正则表达式。我正在使用一个内部使用JAVA来解析Regex的应用程序。我不能写自己的java代码,我只能提供正则表达式。 :(

    1. (Question*(.*?))
    2. (Information*(.*?))
    3. 问题是我只收到“问题”记录而系统没有显示其他三个记录。

      我发现问题是,当我将正则表达式作为(Question*(.*?))进行测试时,它确实在第一个示例中删除了“名称”,但是在其他三个示例中它没有返回任何内容。我的意思是它回归空白。因此,当系统解析“提交”时,在“问题”正则表达式的第一次转换中,它没有找到“问题”字,因此它不会返回任何内容。

      我想要的是,如果“问题”不可用,那么系统应返回完整字符串而不是删除它。因此,当系统在第一个正则表达式中解析“提交”时,它应该按原样返回“提交”。

      我不知道我的正则表达式是不正确的

      PS:'选择'和'提交'只是两个例子,其他记录至少有20-25个,但只有两个记录中有' Name '。

1 个答案:

答案 0 :(得分:1)

您可以使用这样的正则表达式。 由于它是“或”,因此匹配将始终为MatchGroup 1.(假设您执行“每行一场比赛”)

正则表达式本身将匹配整个字符串,但第一个匹配组将只包含您的关键字。

(?:.*?(Question)|(Information).*?|(Select|Submit))

Regular expression visualization

Debuggex Demo