字符串包含子字符串和子字符串不是较长单词的一部分(完全匹配)

String contains substring and substring not part of longer word (exact match)

我在名为 pdfText.

的字符串中捕获了 PDF 文件的全文

接下来,我循环遍历一个包含子字符串的数组 found/searched for in the pdfText-string.

其中一个子字符串是 Invoice

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

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

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

,这当然 return 是正确的

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

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

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

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

我相信这应该是可能的,但我目前还不能全神贯注。 我可能需要使用正则表达式?

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

这个使用由@Mederic 在

提出的 RegEx,稍作改动

使用 UiPath activity Is Match 中的构建,在 Programming->String.

下找到

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

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

我声明了以下变量: