如何通过 LibreOffice 的 Calc 中的正则表达式语句捕获公司名称
Posted
技术标签:
【中文标题】如何通过 LibreOffice 的 Calc 中的正则表达式语句捕获公司名称【英文标题】:How to capture company name by regex statement in LibreOffice's Calc 【发布时间】:2021-09-09 19:22:57 【问题描述】:我正在使用 LibreOffice 的 Calc 正则表达式函数从不同的字符串中仅捕获公司名称。一个 Calc 的单元格仅包含一个字符串。这些字符串的结构如下:
C.H. Robinson o/Vienna SZO13G9、SZO6P34、Roger Moor Bus Trans Mouse PT513AA、Anthony HopkinsP.H.U TRI-POL ZMI14A8Mank WXL89040,杰瑞德·莱托
每个字符串总是以公司名称开头,除字母外还可以包括点、空格数(但不总是)、斜线符号。 名称后跟车牌号 - 以大写字母 (2+) 开头,然后是数字 (1+),然后是(但不总是)大写字母(0+),然后是(但不总是)数字(0 +)
有时在逗号之后是第二个车牌,然后是(但不总是)有姓名和姓氏。
很快-我想从字符串的开头到第一个车牌号捕获部分字符串,不包括前面的空格符号。我已经用粗体标记了我想要捕捉的部分。
我试过这个:/(.+)\s[A-Z]+[0-9]+[[A-Z]+]?[[0-9]+]?/gm
但它不起作用。
在许多情况下它都可以工作,感谢@Hitesh,但仍然有一些情况不起作用:例如ŁUKASZ MAZIAR RDE66658、RDE0542P、Taras Stolbowski MULTIBLOB AR7238N, KR5P543, Jacek StasiukMir-Trans WSI66671, WSI1671M, Stanisław SzymańskiMIFESTA SPÓŁKA AKCYJNA SJ1083T, WSI71321, STANISŁAW BOBROWSKI 有时公司名称包括波兰字母。到目前为止,我使用[\s\pL]+
与他们打交道,但不知道在这种情况下如何使用它。
【问题讨论】:
【参考方案1】:以下模式以及替换将为您提供确切的结果:
Pattern: (.*)\s[A-Z]2,[0-9]2.*
Substitution Group: $1
演示:https://regex101.com/r/ESss6i/4
在哪里,
。句点 -> 匹配任何单个字符的单个字符,行尾除外。
[ ] 方括号 -> 匹配括号列表中的任何单个字符
n, -> 带数字和逗号的大括号,匹配前一个字符的最小次数
【讨论】:
@Bartek:这个尝试对你有帮助吗? 只需将这些字符放在带有 OR 条件的第一个括号下【参考方案2】:解决了。 Calc 的第三个参数为空的正则表达式函数返回不匹配的部分,所以我使用\s[A-Z]+[0-9]+.*
选择从汽车车牌号开始的部分字符串,正则表达式函数返回其余部分。
【讨论】:
以上是关于如何通过 LibreOffice 的 Calc 中的正则表达式语句捕获公司名称的主要内容,如果未能解决你的问题,请参考以下文章
Libreoffice Calc Basic 如何通过代码附加 2 个小数位
如何在 libreoffice calc 中编写 python 宏来发送和接收数据
如何在 libreoffice calc 中编写 python 宏以在插入外部数据时处理合并的单元格