Python 带有特殊字符的字母数字字的正则表达式
我正在尝试使用正则表达式捕获带有特殊字符的字母数字单词。 搜索将在最多4-5个单词的小字符串上完成,并应提取一个单词。 目标字符串可以位于字符串中的任何位置,但将用空格分隔 例如: 需要得到这些值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/-]
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/-]+)