【问题标题】:RegEx Pattern - how to extract the N element from a line?RegEx Pattern - 如何从一行中提取 N 元素?
【发布时间】:2019-07-25 14:40:04
【问题描述】:

我尝试创建一个模式来从一行中提取一些值,但没有成功。我可以请你帮忙吗?

我想从这样的一行中提取值(只是一个简单的例子):

502,42 421,421.421 421421,421.55 551
[0-9,.]+ 

问题是我想将每个值分配给不同的变量。

我该怎么做?

【问题讨论】:

  • ^(?:\d+[,. ]){N-1}(\d+)? (其中N是元素的位置)见:regex101.com/r/I4mEzR/1
  • 尊敬的 Ahmed, 感谢您在这方面的回答。我已经检查了您的解决方案,但目标是“拆分”每个 Space \s 上的值,然后我将有 4 个不同的值,并且使用 {N of element} - 我可以将值一一分配给变量改变N. 有可能吗?谢谢,阿吉安!
  • 您使用的是 .NET 吗?如果是这样,为什么不使用Split() 方法而不是正则表达式?无论如何,使用正则表达式,您可以执行^(?:[0-9,.]+\s){N-1}([0-9,.]+) 之类的操作,您的第 N 个元素将位于第一个捕获组中。请参阅:regex101.com/r/WVkcrH/1 或者,如果您的正则表达式支持 \K,您可以使用 ^(?:[0-9,.]+\s){2}\K[0-9,.]+

标签: regex uipath


【解决方案1】:

由于您使用 UiPath 对此进行了标记,因此这是一种方法。创建一个保存您的正则表达式的变量,并为每个匹配创建最多 n 个变量。添加Invoke Code 活动。将输入和输出参数映射到您的变量(在我的例子中,有一个输入 - 正则表达式和两个输出)。

根据需要更改代码。该模式可能会成为另一个输入参数。

Dim matches As MatchCollection = Regex.Matches(in_RegEx, "\d")
out_part0 = matches(0).Value
out_part1 = matches(1).Value

假设您提供 1 2 3 4 作为输入,\d 作为模式,part0 == 1part1 == 2

【讨论】:

    【解决方案2】:

    很高兴见到你们的cmets,感谢你们在这方面的合作。我还为我的“问题”找到了解决方案:

    • 阅读 PDF 文本(或其他来源...)
    • 匹配活动 - 与模式
    • 分配活动(根据需要分配 - 对我来说,变量类型是 Double)= Double.Parse((Matches(0).Groups(2).value).ToString.Replace(".","")。替换(",",".").Trim)
    • 写行(仅用于检查结果)

    如果你创建了一个模式,唯一需要改变的是Assign活动中.Groups(N)的数量。

    海王星

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-19
      • 1970-01-01
      • 1970-01-01
      • 2020-09-29
      • 2018-11-18
      • 2018-05-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多