python - 带有特殊字符的 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
特殊字符仅限于“/ -”。到目前为止,我所有的方法都失败了
解决方案
您可以使用前瞻来限定下一个非空格子字符串具有/
或-
其中之一:
(?<=[ \t])(?=[^ \t]*[/-])([0-9a-zA-Z/-]+)
这仅适用于按照[ \t]
字面意思执行语句的子字符串目标字符串可以位于字符串中的任何位置,但始终用空格分隔。
如果您想在字符串的开头捕获潜在的内容,请删除后面的内容:
(?=[^ \t]*[/-])([0-9a-zA-Z/-]+)
这将捕获具有该已定义字符集且其中至少包含一个字符集的任何子字符串(以使用定界符作为锚点[/-]
的效率为代价...)[ \t]
注意:如果您-
在字符类中用作文字字符,则需要对其进行转义或在类的末尾。否则,-
在字符类中定义一个范围。这是一个鬼鬼祟祟的错误,它用正则表达式试图捕获文字已经咬了很多人-
。
推荐阅读
- firebase - 基于子值和令牌值的安全规则
- laravel - 带有 Vue 标头错误的 Laravel sanctum API 令牌
- c - 计数未在嵌套 for 循环中更新
- swift - 如何将文件名传递给属于数据模型的类
- c - 为什么保存在数组中的地址从 6 个字节变为 7 个字节?
- javascript - 将骨干网从 1.1.2 升级到 1.4.0 会导致 Uncaught TypeError
- r - R中的滚动中位数
- typescript - 如何提取函数签名的推断字符串文字类型?
- javascript - MongoDB的Nodejs Websockets用户活动状态
- c++ - 如何将参数实际值更改/更新为 UI 参数值?(后效SDK,C++)