首页 > 解决方案 > 带有特殊字符的 AlphaNumeric 单词的正则表达式

问题描述

我正在尝试制作正则表达式来捕获带有特殊字符的字母数字单词。搜索将在最多 4 - 5 个单词的小字符串上完成,并且应该提取一个单词。目标字符串可以在字符串中的任何位置,但将用空格分隔。

例如:

"Bill No: THRD/20-21/110"
"CRN No: GSTASP/20-21/066"
"Identifier value: PCPL-2021-000152"

需要获取这些值

THRD/20-21/110
GSTASP/20-21/066
PCPL-2021-000152

特殊字符仅限于“/ -”。到目前为止,我所有的方法都失败了

标签: pythonregexparsing

解决方案


您可以使用前瞻来限定下一个非空格子字符串具有/-其中之一:

(?<=[ \t])(?=[^ \t]*[/-])([0-9a-zA-Z/-]+)

演示

这仅适用于按照[ \t]字面意思执行语句的子字符串目标字符串可以位于字符串中的任何位置,但始终用空格分隔。


如果您想在字符串的开头捕获潜在的内容,请删除后面的内容:

(?=[^ \t]*[/-])([0-9a-zA-Z/-]+)

演示 2

这将捕获具有该已定义字符集且其中至少包含一个字符集的任何子字符串(以使用定界符作为锚点[/-]的效率为代价...)[ \t]

注意:如果您-在字符类中用作文字字符,则需要对其进行转义或在类的末尾。否则,-在字符类中定义一个范围。这是一个鬼鬼祟祟的错误,它用正则表达式试图捕获文字已经咬了很多人-


推荐阅读