【问题标题】:String contains substring and substring not part of longer word (exact match)字符串包含子字符串和子字符串不是较长单词的一部分(完全匹配)
【发布时间】:2017-08-09 09:39:42
【问题描述】:

我已在名为pdfText 的字符串中捕获了 PDF 文件的全文。

接下来,我将循环遍历包含要在 pdfText-string 中找到/搜索的子字符串的数组。

其中一个子字符串是Invoice

pdfText 和我正在搜索的子字符串都转换为小写。

如果在 pdfText 中找到至少一个子字符串,则布尔值设置为 true。

现在,我有一个示例,其中pdtText 包含“...要开具发票的净金额...”。这是文本中“发票”的唯一变体。 如果我使用

,这当然会返回 true

substring = "Invoice" ... pdfText.contains(substring.ToLower).

但在这种情况下,我需要它返回 false。我只需要找到完全匹配。

另一个例子,如果pdfText 包含'...这是一张发票。请支付....要开具发票的净金额...' 由于第一个发票匹配,而不是第二个发票(非)匹配,布尔值应设置为 true。

所以我正在寻找的是在字符串pdfText 中找到一个子字符串Invoice,并确保该子字符串不是较长单词invoiced, invoice-process etc. 的一部分。请注意,invoice. 应该返回 True

我相信这应该是可能的,但目前我无法理解它。 我可能需要使用正则表达式?

【问题讨论】:

    标签: string vb.net uipath


    【解决方案1】:

    这个使用了正则表达式,略有改动,由@Mederic 在https://stackoverflow.com/a/45587916/2326360 提出的@

    使用 UiPath 活动中的构建 Is Match,在 Programming->String 下找到。

    在你的循环中使用它,使用当前设置。

    正则表达式是:substring+"[^a-zA-Z]"

    我已经声明了以下变量:

    【讨论】:

      【解决方案2】:

      RegEx 将是一个好方法。

      我不久前才开始使用 RegEx,但我认为这会很好。

      正则表达式:

      (invoice)[^a-zA-Z]
      

      说明:

      () 创建捕获组

      invoice 寻找发票的匹配项

      [^a-zA-Z] 检查后面没有 a-z 或 A-Z 的字符

      示例:


      示例:已开具发票

      结果:没有结果


      示例:这是一张发票。 结果:匹配 invoice. 捕获组 1 = invoice


      实施:

      Dim m As Match = Regex.Match(pdfText.ToLower,"(invoice)[^a-zA-Z]")
      ' If successful, write the group.
      If (m.Success) Then
          Dim key As String = m.Groups(1).Value
          Console.WriteLine(key)
      End If
      

      【讨论】:

      • 您应该使用 UiPath 活动,而不是编码 RegEx 匹配。
      • @NicolaiKrüger 我对 UiPath 一点也不熟悉,所以如果你推荐它,我会让你写下来。
      猜你喜欢
      • 2017-05-26
      • 1970-01-01
      • 1970-01-01
      • 2023-04-03
      • 1970-01-01
      • 1970-01-01
      • 2015-07-27
      • 1970-01-01
      • 2022-11-19
      相关资源
      最近更新 更多