如何在正则表达式搜索数字时使冒号为可选

时间:2019-04-11 09:28:43

标签: regex uipath

我正在尝试使用UIPATH中的regex从文本字符串中提取特定数字。正则表达式适用于文本中没有冒号的所有情况。

我正在搜索单词EWO(带或不带:)。即EWOEWO: 然后,我需要这个单词后面的6个数字。

我用完了后续操作,直到发现可能存在冒号: 要搜索的文字

TEST0203033 EWO 125399 WWT US QUOTE# 1235338.1

TEST0203033 EWO: 125399 WWT US QUOTE# 1235338.1

我尝试添加:?以使搜索中的冒号为可选,但返回的响应很奇怪。

在字符串TEST0203033 EWO: 125399 WWT US QUOTE# 1235338.1

使用

(?<=EWO:?\s*)([0-9]+)

结果: 12

我期望的结果是125399

原创,不适用于冒号

(?<=EWO\s*)([0-9]+)

产生一些奇怪的结果

(?<=EWO:?\s*)([0-9]+)

2 个答案:

答案 0 :(得分:0)

This RegEx可能有助于将目标输入分为两个单独的组,您可以在其中简单地使用$2拨打所需的电话号码:

([EWO\:]+)\s([0-9]+)

enter image description here

您还可以通过删除组$1或创建与this类似的完全匹配来进一步简化它:

(TEST[0-9]+\s)[EWO\:\s]+([0-9]+)\sWWT\sUS\sQUOTE#\s([0-9\.]+)

enter image description here

答案 1 :(得分:0)

这是您在Java中的处理方式,但是大多数引擎的regex模式应该相同。

      String text1 = "TEST0203033 EWO 125399 WWT US QUOTE# 1235338.1";
      String text2 = "TEST0203033 EWO: 125399 WWT US QUOTE# 1235338.1";

      // Find EWO with an optional : following by 0 or more spaces.
      // Then capture the number.
      String regx = "EWO:? *(\\d+)";

      Pattern pattern = Pattern.compile(regx);

      Matcher matcher = pattern.matcher(text1);
      if (matcher.find()) {
         System.out.println(matcher.group(1));
      }

      matcher.reset(text2);
      if (matcher.find()) {
         System.out.println(matcher.group(1));
      }