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

时间:2017-08-09 09:39:43

标签: string vb.net uipath

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

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

其中一个子串是Invoice

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

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

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

,这当然会返回true

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

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

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

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

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

@Mederic在https://stackoverflow.com/a/45587916/2326360

提出了一个稍有变化的RegEx

使用Is Match下的UiPath活动Programming->String中的内置版。

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

enter image description here

RegEx是:substring+"[^a-zA-Z]"

我已声明以下变量:

enter image description here