【问题标题】:Regex positive lookbehind after digits正则表达式正后看数字
【发布时间】:2021-09-03 13:40:40
【问题描述】:

尝试获取所有字符,直到一个/多个数字后的新行,从下面的文本中向前看

(?<=below customer.\s.*\n.* )(.*)
I order standardinstalation to below customer.
Paul Rilley
Abbeyroad 55

如果道路名称没有空格,它可以工作(给出 55)。不与(高保守党道路)一起工作。我应该得到的数字(55b)之后也可能有字母。 我需要查看单词后面(在客户下方),因为第一行是唯一始终相同的部分。

【问题讨论】:

  • 也许(?s)below customer.*?(\d+[a-zA-Z]*) 可能会起作用?
  • 如果您发布了正则表达式管道部分,这将有助于提出更好的建议。您是在访问正则表达式匹配值还是定义一个组?

标签: regex uipath


【解决方案1】:

你可以使用

(?m)(?<=below customer\.\r?\n(?:.+\n)*?.+ )(\d+[A-Za-z]*)\r?$

请参阅.NET regex demo

详情

  • (?m) - 多行模式使$匹配任何行的结尾
  • (?&lt;=below customer\.\r?\n(?:.+\n)*?.+ ) - 与 below customer. 匹配的后视,然后是行结束序列,然后是零或多行带有行结束序列的行,尽可能少,然后是除换行符之外的零个或多个字符,直到最后一个空格后跟
  • (\d+[A-Za-z]*) - 第 1 组:一个或多个数字,然后是零个或多个字母
  • \r?$ - 可选的 CR 字符和行尾。

它也会匹配55b

【讨论】:

  • 嗯...这似乎没问题吧?不知道您是否需要捕获组,但可以
  • @Thefourthbird 这取决于 OP 在他们的管道中有什么。如果他们指的是第 1 组,我们不能删除括号。如果我们了解大局,我们甚至可以尝试更多优化。
  • 我使用 RPA 匹配活动中的表达式来获取值。尝试了建议的解决方案,它没有用。我还应该提到,在 Abbeyroad 55 下方还有更多带有文字的行。
  • @HenkkaHH 您当前的问题是关于如果地址包含空格,如何匹配包含低于 2 行单词的数字。如果您想说有更多行,则需要在问题中添加它,并且添加您尝试确保可变行文本匹配的内容会很棒。
  • @HenkkaHH 试试(?m)(?&lt;=below customer\.\r?\n(?:.+\n)*?.+ )(\d+[A-Za-z]*)\r?$,见demo
【解决方案2】:

大多数 正则表达式风格中,后视必须是固定宽度。在 .NET 中,支持可变宽度。

您可以在 PCRE 和 .NET 中使用:

/(?<=below customer\.)\r?\n.*\r?\n.* (\w+)$/gm

Demo 用于 PCRE

Demo 用于 .NET

【讨论】:

  • .NET 正则表达式不支持\R。它确实支持非固定的后视模式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-07
  • 1970-01-01
  • 2018-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多