【问题标题】:Notepad++ regex to extract usernames from this listNotepad++ 正则表达式从这个列表中提取用户名
【发布时间】:2020-07-05 16:22:27
【问题描述】:

我在下面有这个列表:

scrapeDate,username,full_name,is_private,follower_count,following_count,media_count,biography,hasProfilePic,external_url,email,contact_phone_number,address_street,category,businessJoinDate,businessCountry,businessAds,countryCode,cityName,isverified
07/05/2020 05:37 AM,maplethenorwich,Maple the Norwich,False,0,0,0,,False,,,,,,,,,,,No
07/05/2020 05:37 AM,baby_yoda_militia,Baby Yoda,False,0,0,0,,False,,,,,,,,,,,No
07/05/2020 05:37 AM,caciquegoldendoodle,CaciqueGoldenDoodle,False,0,0,0,,False,,,,,,,,,,,No
07/05/2020 05:37 AM,ja_watts,Julie Anna Watts,False,0,0,0,,False,,,,,,,,,,,No
07/05/2020 05:37 AM,lets_go_zumba_and_travel,Mrsirenetakamoto,False,0,0,0,,False,,,,,,,,,,,No
07/05/2020 05:37 AM,bunnyslash,Bunnyslash,False,0,0,0,,False,,,,,,,,,,,No

我只想获取以下用户名:

maplethenorwich
baby_yoda_militia
caciquegoldendoodle
ja_watts
lets_go_zumba_and_travel
bunnyslash

我试过^(?:[^,\r\n]*,){3}([^,\r\n]+).*,但它让我“错了”。

我希望有人可以帮助我找到正确的正则表达式来仅提取用户名。

【问题讨论】:

标签: regex notepad++


【解决方案1】:

你可以试试:

.*?,(.*?),.*

上述正则表达式的解释:

  • .*? - Lazily 匹配除新行之外的所有内容。
  • , - 从字面上匹配 ,
  • (.*?) - 表示第一个捕获组匹配 lazily username 或 csv 中的第二个值。
  • ,.* - 贪婪地匹配除新行之外的所有内容。 如果您不想删除内容;离开这个并捕获上面的组并将它们写入一个新文件或根据您的要求。
  • $1 - 对于替换部分,使用 $1 将所有匹配的文本替换为仅捕获的组。

你可以在here.找到上述正则表达式的demo

记事本++的结果快照

【讨论】:

    【解决方案2】:

    您正在使用量词 {3} 重复该组 3 次,但没有必要重复它,因为您需要第二个值。

    ^(?:[^,\r\n]*,){3}([^,\r\n]+).*
     ^^^          ^^^^
    

    你可以省略量词和非捕获组,因为没有什么可重复的。

    ^[^,\r\n]*,([^,\r\n]+).*
    
    • ^ 字符串开头
    • [^,\r\n]*, 匹配除逗号或换行符以外的任何字符 0+ 次,然后匹配 ,
    • ( 捕获第 1 组
      • [^,\r\n]+ 匹配除逗号或换行符以外的任何字符 1 次以上
    • )关闭第一组
    • .* 匹配该行的其余部分

    Regex demo

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-08
      • 1970-01-01
      • 1970-01-01
      • 2020-07-24
      • 1970-01-01
      • 2020-06-17
      • 2012-08-26
      相关资源
      最近更新 更多