Python 带有特殊字符的字母数字字的正则表达式

Python 带有特殊字符的字母数字字的正则表达式,python,regex,parsing,Python,Regex,Parsing,我正在尝试使用正则表达式捕获带有特殊字符的字母数字单词。 搜索将在最多4-5个单词的小字符串上完成,并应提取一个单词。 目标字符串可以位于字符串中的任何位置,但将用空格分隔 例如: 需要得到这些值 THRD/20-21/110 GSTASP/20-21/066 PCPL-2021-000152 特殊字符仅限于“/”—— 。到目前为止,我的所有方法都失败了。您可以使用前瞻来确定下一个非空间子字符串中包含/或-: (?<=[ \t])(?=[^ \t]*[/-])([0-9a-zA-Z/-]

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

例如:

需要得到这些值

THRD/20-21/110
GSTASP/20-21/066
PCPL-2021-000152
特殊字符仅限于“/”——
。到目前为止,我的所有方法都失败了。

您可以使用前瞻来确定下一个非空间子字符串中包含
/
-

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

它将捕获具有定义的字符集且其中至少有一个
[/-]
的任何子字符串(以使用
[\t]
分隔符作为锚定符的效率为代价…)


注意:如果将
-
用作字符类中的文字字符,则需要将其转义或放在类的末尾。否则,
-
将在字符类中定义一个范围。这是一个潜藏的bug,它让许多人感到痛苦,正则表达式试图捕获一个文本
-

I您的目标字符串始终在末尾?@dawg目标字符串不能位于字符串中的任何位置,但总是用空格分隔。此解决方案效果很好。但是,它也在我的问题的字符串中匹配类似于以下内容的
发票/票据
。请注意,我的目标字符串将始终是字母数字,即两者的组合。我可以用简单的python字符串方法解决这个问题。如果你有一个优雅的解决方案,以及这将是非常感谢。谢谢。添加第二个先行检查,以确定其中是否有数字:
(?=[^\t]*[/-])(?=[^\t]*[0-9])([0-9a-zA-Z/-]+)
(?<=[ \t])(?=[^ \t]*[/-])([0-9a-zA-Z/-]+)
(?=[^ \t]*[/-])([0-9a-zA-Z/-]+)