具有特殊字符的字母数字单词的Regex



我正在尝试制作regex,用于捕获具有特殊字符的字母数字单词。搜索将在最多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/-]+)

演示2

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

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

最新更新