REGEX用于匹配字符串加上第一次出现的子字符串

问题描述

我正在寻找解决以下问题的正则表达式。在下面的示例中,我提取VITMINC

的值

测试字符串

1. As VITMINC##1-0-1##1 days.As
2. amlodipine ##vitamin c##diclo##tabramycin eye drop##metformin##0-0-1##15 days. amlodipine ##1-0-1## 3 days.
3. XyloMetazoline(P) Nasal drops##0-1-0##2 days.   Paracetamol 500mg tab##0.5-0-0-0##2 days. VITMINC##0.5-0-0##2 days.   Chlorpheniramine maleate 4mg tab##0-1-0##2 days.
4. VITMINC##0-0-0-1##2 days.
5. amlodipine##vitamin c##diclo##tabramycin eye drop##metformin##0-0-1##15 days.

上述字符串的样本输出

1. VITMINC##1-0-1##1 days
2. ##vitamin c##diclo##tabramycin eye drop##metformin##0-0-1##15 days
3. VITMINC##0.5-0-0##2 day
4. VITMINC##0-0-0-1##2 days
5. vitamin c##diclo##tabramycin eye drop##metformin##0-0-1##15 days

我正在尝试使用以下正则表达式,但未获得预期的输出

VITMINC##.*##([0-9]+ [days]){1}?
VITMINC##.*##([0-9]+ [days])*?
VITMINC##.*##[0-9]+ days
VITMINC##.*##([0-9]+ days){1}?

对不起,如果我的解释不好。并在此先感谢。

解决方法

假设您实际上并不想在比赛开始时使用#个字符(示例2和5是自相矛盾的),则可以使用

(?i)VITA?MIN\s*C##.*?##[0-9]+ days

请参见regex demo

详细信息

  • (?i)-不区分大小写的修饰符
  • VITA?MIN-VITAMINVITMIN
  • \s*-0个或多个空格
  • C##-一个C##子字符串
  • .*?-除换行符以外的任何零个或多个字符,应尽可能少
  • ##-一个##子字符串
  • [0-9]+ days-1个或多个数字,空格,days子字符串。