匹配有效变量模式的正则表达式

3
假设我有一个字符串s。 我想编写一个使用正则表达式的函数,如果s具有以下特征,则返回True。
  1. 忽略前导空格。
  2. 在步骤1之后,s可以以任何以下字符a-z,A-Z或_开头
  3. 在第1个字符之后,s可以具有0个或多个以下字符a-z,A-Z,0-9和/或_
  4. s可以具有1个或多个尾随空格字符。
我已经尝试了下面建议的解决方案,但是哪里出错了呢?
import re
def test_s(s):
     return bool(re.search("[A-Za-z_\s]{1}[A-Za-z0-9_]*[\s]*$",s))

更新: 我尝试了下面的解决方案(它无法捕获我的最后两个测试用例):
情况:返回bool(re.search(r'\s*[A-Za-z_]\w*\s*', s))
TESTLIST = ['__This_Is_a_StringThatShouldWork' , '     SoIsThis1    ' , '4getaboutThis1', '7his_ShouldReturnFalse']]
for s in TESTLIST:
    print(is_var(s))

[出]

True
True
True (Should be False)
True (Should be False)
3个回答

2

试试这个:

import re
def test_s(s):
    return bool(re.search(r'\s*[A-Za-z_]\w*\s*', s))

一个或多个结尾空格,正如他所说的。 - nkprince007
1
可以有,但不一定有。这是有区别的。 - James
詹姆斯:根据你的建议,我更新了我的注释。你有什么想法为什么 s 的最后两个例子返回 True 而不是 False? - DeeeeRoy

1

我认为这应该可行。

import re

def test_s(s):
    return bool(re.match("\s+[a-zA-Z_][a-zA-Z0-9_]*\s+", s))

0

试试这个正则表达式:

[a-zA-Z_]\w*\s+

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接