好吧,我格式化ftp的帐号... 帐目安排如下:
bob, joe:######
但是,有些帐户名称后面有中间名/中间名,如下所示:
bob, joe r:######
bob, joe ryan:######
我已经尝试了[^,] *(:+)但是如果没有中间名/首字母,它会选择一个姓氏(它也会选择:)
我只需要获得中间名/首字母。谢谢!
答案 0 :(得分:1)
您正在寻找一种消极的前瞻,这并非所有正则表达式语言都支持。在perl中,你的正则表达式看起来像这样:
/(?!,) (.*?)(:.+)/
perl -e 'print "$1 -- $2" if "bob, joe:######" =~ /(?!,) (.*?)(:.+)/;'
joe -- :######
perl -e 'print "$1 -- $2" if "bob, joe r:######" =~ /(?!,) (.*?)(:.+)/;'
joe r -- :######
答案 1 :(得分:0)
不确定我是否理解100%,但我猜你想在第二个例子中找到“r”和“ryan”。在那种情况下试试
[^:]*\s+(\w+):[^:]*
[^:] \ s +匹配之前的所有内容 :[^:] 匹配
之后的所有内容一个问题是,如果没有中间不确定是否有问题,它会选择姓氏
注意到你不希望在这种情况下使用姓氏我修改它以要求姓氏,否则没有匹配:
[^:]*,\s+\w+\s+(\w+):[^:]*
答案 2 :(得分:0)
我不确定我明白你在问什么。如果你要求匹配中间名和initial,那么你可以在python中使用以下正则表达式:\w+\s+\w
。
在以下文件中:
tom, smith:######
bob, joe k:######
nick, ryan stevens:######
您将获得以下输出:
joe k
ryan s
编辑:由于某些名称中包含连字符,我将使用以下正则表达式:[a-zA-Z\-]+\s+\w
。