繁体   English   中英

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

[英]Extract substring using Regex, but if string doesn't match Regex then retain it

对于这里的大师来说,这听起来像是另一个简单的正则表达式,但是现在确实让我头痛不已:)

我的问题是,我有以下数据集,但我想摆脱“名称”。

  1. 名字的问题例如约翰的问题,鲍勃的问题
  2. 信息-姓名信息-朱莉,信息-理查德,信息-大卫
  3. 选择
  4. 提交

如我们所见,“名称”仅存在于几条记录中,而在其他记录中则没有。

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

  1. (Question*(.*?))
  2. (Information*(.*?))

问题是我仅获得“问题”记录,而系统未显示其他三个记录。

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

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

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

PS:“选择”和“提交”只是两个示例,还有至少20-25个其他记录,但是只有两个记录中包含“ 名称 ”。

您可以使用这样的正则表达式。 由于它是“或”,因此匹配始终会是MatchGroup1。(假设您执行“每行一个匹配”)

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

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

正则表达式可视化

Debuggex演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM