提取令牌的Python正则表达式
我试图找到所有看起来像提取令牌的Python正则表达式,python,regex,Python,Regex,我试图找到所有看起来像abc\u rty或abc\u 45或abc09\u 23k或abc09-K34或4535的代币。代币不应以\uuu或-或数字开头 我没有取得任何进步,甚至失去了我所取得的进步。这就是我现在拥有的: r'(?<!0-9)[(a-zA-Z)+]_(?=a-zA-Z0-9)|(?<!0-9)[(a-zA-Z)+]-(?=a-zA-Z0-9)\w+' 那么它应该接受 D923-44 and 43 and uou and hi_hello 它应该忽略
abc\u rty
或abc\u 45
或abc09\u 23k
或abc09-K34
或4535
的代币。代币不应以\uuu
或-
或数字开头
我没有取得任何进步,甚至失去了我所取得的进步。这就是我现在拥有的:
r'(?<!0-9)[(a-zA-Z)+]_(?=a-zA-Z0-9)|(?<!0-9)[(a-zA-Z)+]-(?=a-zA-Z0-9)\w+'
那么它应该接受
D923-44 and 43 and uou and hi_hello
它应该忽略
08*) %%5 89ANB -iopu9 _M89 _97N
我可能错过了一些案例,但我认为文本就足够了。道歉如果它不是这似乎按预期工作:
regex = re.compile(r"""
(?<!\S) # Assert there is no non-whitespace before the current character
(?: # Start of non-capturing group:
[^\W\d_] # Match either a letter
[\w-]* # followed by any number of the allowed characters
| # or
\d+ # match a string of digits.
) # End of group
(?!\S) # Assert there is no non-whitespace after the current character""",
re.VERBOSE)
regex=re.compile(r”“”
(?这似乎按预期工作:
regex = re.compile(r"""
(?<!\S) # Assert there is no non-whitespace before the current character
(?: # Start of non-capturing group:
[^\W\d_] # Match either a letter
[\w-]* # followed by any number of the allowed characters
| # or
\d+ # match a string of digits.
) # End of group
(?!\S) # Assert there is no non-whitespace after the current character""",
re.VERBOSE)
regex=re.compile(r”“”
(?
使用空格分隔符拆分行,然后在要筛选的行中运行此正则表达式
^
是行的开始
\d
表示数字[0-9]
+
表示一个或多个
|
表示或
[A-Za-z]
第一个字符必须是字母
[\w_-]*
后面可以有任何字母数字字符,也可以什么都没有
$
表示行尾
正则表达式的流程如我提供的图表所示,这在某种程度上解释了它是如何发生的
不过,我会解释一下,基本上它检查的是所有数字还是以字母(上/下)开头,然后在该字母之后检查字母数字字符,直到行尾
使用空格分隔符拆分行,然后在要筛选的行中运行此正则表达式
^
是行的开始
\d
表示数字[0-9]
+
表示一个或多个
|
表示或
[A-Za-z]
第一个字符必须是字母
[\w_-]*
后面可以有任何字母数字字符,也可以什么都没有
$
表示行尾
正则表达式的流程如我提供的图表所示,这在某种程度上解释了它是如何发生的
不过,我会解释一下,基本上它检查的是所有数字还是以字母(大写/小写)开头,然后在该字母之后检查字母数字字符,直到行尾。你能澄清一下“不应该以数字开头,但只能有数字”是什么意思吗?此外,令牌前后允许使用哪些字符(换句话说,是什么将令牌与周围文本分隔开)?我的意思是,它不能是89AM,但令牌可以是一个像89AM这样的单独数字。因此,您希望从有效令牌中提取数字?不。假设我有一行空格作为分隔符,如“fus9f23-44 24 uou)808*)*8&^^&%%5 89ANB-iopu9_897;ui7 khi_hello”然后它应该选择“fus9f23-44”、“24”和“khi_hello”好的,谢谢(虽然我不明白你为什么写“但不是用下划线或连字符”-这两个都不是空格)。为了其他读者的利益,如果您编辑您的问题以更新这些要求,这将是一个好主意。并非所有人都阅读所有评论。您能否澄清“不应以数字开头,但只能有数字”的含义?以及,令牌前后允许使用哪些字符(换句话说,是什么将标记与周围的文本区分开来的)?我的意思是它不能是89AM,但标记可以是一个像89AM这样的单独数字。因此,您希望从有效标记中提取数字?不。假设我有一行空格作为分隔符,如“fus9f23-44 24 uou”)808*)*8&^^&%%5 89ANB-iopu9 897M ui7 khi_hello然后它应该选择“fus9f23-44”、“24”和“khi_hello”好的,谢谢(虽然我不明白你为什么写“但不是用下划线或连字符”——这两个都不是空格)。为了其他读者的利益,如果您编辑了您的问题,用这些要求对其进行更新,这将是一个好主意。并不是每个人都阅读所有的评论。这根本不符合OP的要求。@TimPietzcker拆分空格,然后按此正则表达式过滤。我认为它有效。。(或者至少非常接近。在接近尾声时匹配
,我认为需要更加严格)@Izkata:不。它允许许多“非法”匹配。Nishant只允许字母数字(加连字符/下划线)匹配。(之前这个问题还不清楚,但评论和当前的编辑清楚地表明了这一点)。@TimPietzcker I更新。我还将使用一个通过空格进行解析的正则表达式进行更新。@progenhard:你能给我解释一下这个正则表达式翻译成什么吗。这完全不符合OP的要求。@TimPietzcker拆分空格,然后按这个正则表达式过滤。我认为它有效。。(或者至少非常接近。在接近尾声时匹配
,我认为需要更加严格)@Izkata:不。它允许许多“非法”匹配。Nishant只允许字母数字(加连字符/下划线)匹配。(之前这个问题还不清楚,但评论和当前的编辑清楚地表明了这一点)。@TimPietzcker I更新。我还将使用一个通过空格解析的正则表达式进行更新。@progenhard:你能给我解释一下这个正则表达式翻译成什么吗。
^(\d+|[A-Za-z][\w_-]*)$