求匹配新浪微博中@用户的正则表达式

Airch 2012-04-09 05:15:34
RT 匹配新浪微博中的@用户的正则表达式
例:

xxxx:@啊啊啊啊-1asdasd:你挂了

我要匹配出 @啊啊啊啊-1asdasd

结尾一般为标点符号,空格,以及括号等

重分答谢
...全文
1300 48 打赏 收藏 转发到动态 举报
写回复
用AI写文章
48 条回复
切换为时间正序
请发表友善的回复…
发表回复
chengcheng@2020 2014-03-04
  • 打赏
  • 举报
回复
怎么让他不把邮箱地址匹配呢? ++++++++++++++++++++++++++++++++++
Javajisa 2014-02-17
  • 打赏
  • 举报
回复
输入邮箱会匹配出错的,另外,如果多个用户不使用空格分开,直接连在一起@,例:@a@b@c这样子微博也能匹配出用户,但如果自己写正则就很难匹配出了,而且,@微盘a791446794@163.com@Druapl社区,也能匹配出'@微盘'和'@Druapl社区',而中间的邮箱地址不会匹配到。所以,看似简单的@功能,实际上很复杂的。
tianyichuanqi 2012-09-17
  • 打赏
  • 举报
回复
试试我写的:
/(\w+)?@(\S+)$|@$/
tianyichuanqi 2012-09-17
  • 打赏
  • 举报
回复
答案呢?解决了么?
totousann 2012-08-24
  • 打赏
  • 举报
回复
Pattern.compile(String.format("@[[^@\\s%s]0-9]{1,20}", "`~!@#\\$%\\^&*()=+\\[\\]{}\\|/\\?<>,\\.:\\u00D7\\u00B7\\u2014-\\u2026\\u3001-\\u3011\\uFE30-\\uFFE5"))

这个好使,反编译出来的。另外有没有人知道类似新浪微博的话题模式的匹配啊,例如:123456#黄岩岛是我们的#123456#钓鱼岛是我们的#123456#南沙群岛是我们的#123456. 其中只匹配"#.....#" 而这个匹配字段之间的或之外的都不匹配
EnForGrass 2012-04-14
  • 打赏
  • 举报
回复
[Quote=引用 42 楼 的回复:]

谁能帮我提取出来下
[/Quote]
提取什么
Airch 2012-04-14
  • 打赏
  • 举报
回复
谁能帮我提取出来下
zhangsuyunpk521 2012-04-13
  • 打赏
  • 举报
回复
忘了说了LZ何必弄那么复杂,sinaAPI里面不是有一个@联想搜索的方法么search/suggestions/at_users @联想搜索
zhangsuyunpk521 2012-04-13
  • 打赏
  • 举报
回复
[Quote=引用 36 楼 的回复:]

引用 35 楼 的回复:

引用 34 楼 的回复:

引用 33 楼 的回复:

不用这么复杂,这样就可以
@"(?i)@[\u4e00-\u9fa5a-z0-9_-]{4,30}(?=\b)"
新浪微博的昵称是4-30个字符支持中英文,数字,“_”和减号


好像你前面那个就可以,我测试过几个特别的昵称

问一下楼主你既然在做这个匹配那么我想问一下就是你@的列……
[/Quote]
就是像sina一样当我识别到@符号之后然后后面的第一个字符匹配出来的列表悬浮窗口的位置,也就是如果能获取到光标的坐标就好了,具体你可以试试sina的@然后看一下的他的那个定位,不知道这个定位有什么办法
wackyboy 2012-04-13
  • 打赏
  • 举报
回复
[Quote=引用 34 楼 的回复:]
引用 33 楼 的回复:

不用这么复杂,这样就可以
@"(?i)@[\u4e00-\u9fa5a-z0-9_-]{4,30}(?=\b)"
新浪微博的昵称是4-30个字符支持中英文,数字,“_”和减号


好像你前面那个就可以,我测试过几个特别的昵称
[/Quote]

C# 中 \w还包含韩文 日文等双字节的文字 但是新浪微博的昵称只能是中英文,数字,“_”和减号
不符合这个规则的 肯定不是新浪微博的昵称
Airch 2012-04-13
  • 打赏
  • 举报
回复
[Quote=引用 35 楼 的回复:]

引用 34 楼 的回复:

引用 33 楼 的回复:

不用这么复杂,这样就可以
@"(?i)@[\u4e00-\u9fa5a-z0-9_-]{4,30}(?=\b)"
新浪微博的昵称是4-30个字符支持中英文,数字,“_”和减号


好像你前面那个就可以,我测试过几个特别的昵称

问一下楼主你既然在做这个匹配那么我想问一下就是你@的列表如何像sina那样定位呢
给你……
[/Quote]

@定位? 你是想做鼠标放用户名字上有用户的信息显示出来?

还是简单的链接跳转?

zhangsuyunpk521 2012-04-13
  • 打赏
  • 举报
回复
[Quote=引用 34 楼 的回复:]

引用 33 楼 的回复:

不用这么复杂,这样就可以
@"(?i)@[\u4e00-\u9fa5a-z0-9_-]{4,30}(?=\b)"
新浪微博的昵称是4-30个字符支持中英文,数字,“_”和减号


好像你前面那个就可以,我测试过几个特别的昵称
[/Quote]
问一下楼主你既然在做这个匹配那么我想问一下就是你@的列表如何像sina那样定位呢
给你看网址看看现在就卡在定位了
http://menexpert.lorealparis.com.cn/App/
Airch 2012-04-13
  • 打赏
  • 举报
回复
[Quote=引用 33 楼 的回复:]

不用这么复杂,这样就可以
@"(?i)@[\u4e00-\u9fa5a-z0-9_-]{4,30}(?=\b)"
新浪微博的昵称是4-30个字符支持中英文,数字,“_”和减号
[/Quote]

好像你前面那个就可以,我测试过几个特别的昵称
wackyboy 2012-04-13
  • 打赏
  • 举报
回复
不用这么复杂,这样就可以
@"(?i)@[\u4e00-\u9fa5a-z0-9_-]{4,30}(?=\b)"
新浪微博的昵称是4-30个字符支持中英文,数字,“_”和减号
EnForGrass 2012-04-13
  • 打赏
  • 举报
回复
[Quote=引用 31 楼 的回复:]

引用 30 楼 的回复:

引用 28 楼 的回复:

没人

试试这个
@[^@\r\t\n]*(?=[\s::,,.。])


你这个遇到空格不会结束
[/Quote]
那改一下就行了,试试
@[^@\s]*(?=[\s::,,.。])
Airch 2012-04-13
  • 打赏
  • 举报
回复
[Quote=引用 30 楼 的回复:]

引用 28 楼 的回复:

没人

试试这个
@[^@\r\t\n]*(?=[\s::,,.。])
[/Quote]

你这个遇到空格不会结束
EnForGrass 2012-04-13
  • 打赏
  • 举报
回复
[Quote=引用 28 楼 的回复:]

没人
[/Quote]
试试这个
@[^@\r\t\n]*(?=[\s::,,.。])
wackyboy 2012-04-13
  • 打赏
  • 举报
回复
试试这个
@"@[\w-]+"
Airch 2012-04-13
  • 打赏
  • 举报
回复
没人
Airch 2012-04-13
  • 打赏
  • 举报
回复

if(!/^[0-9a-z_][_.0-9a-z-]{0,31}@([0-9a-z][0-9a-z-]{0,30}\.){1,4}[a-z]{2,4}$/.test(l)){return false}


刚弄错了
加载更多回复(28)
Cola是一个分布式的爬虫框架,用户只需编写几个特定的函数,而无需关注分布式运行的细节。任务会自动分配到多台机器上,整个过程对用户是透明的。pip install pyyaml安装下载或者用git clone源码,假设在目录/to/pth/cola,将该路径添加到Python path。一种简单的方法是在site-packages添加pth文件。site-packages因系统而异,如果是windows,假设python 装在C:\python27,那么就是C:\python27\Lib\site-packages;如果是linux,那么应该是/usr/local /lib/pythonX.X/dist-packages。在site-packages下新建一个cola.pth文件,里面写上路径:/to/path/cola。Cola目前自带了若干个爬虫,在项目根目录下的contrib。下面就wiki为例,分别说明如何在单机和分布式环境下运行。依赖无论是维基百科还是新浪微博的实现,数据都存放在MongoDB,所以要确保MongoDB的安装。在wiki下的wiki.yaml和weibo下的weibo.yaml可以配置MongoDB的主机和端口。维基百科和新浪微博实现依赖于下面的几个包:mechanizepython-dateutilBeautifulSoup4mongoenginersa(仅新浪微博需要)可以使用pip或者easy_install来安装。单机模式单机模式非常简单,只需运行contrib/wiki/__init__.py即可。cd /to/path/cola/contrib/wiki python __init__.py要运行新浪微博的爬虫,需要在weibo.yaml配置登录的用户名和密码。这里要注意,要保证这个用户名和密码在登录时不需要验证码。停止则需运行stop.py,注意不能通过直接杀死进程来停止,否则会导致cola非法关闭。 如果非法关闭,确保cola不在运行的情况下,则可以运行stop.py来恢复。但无论如何,都不推荐非法关闭,否则可能遇到不可预知的错误。python stop.py分布式模式首先需要启动cola master和cola workers。分别运行根目录下bin的start_master.py和start_worker.py启动cola master:cd /to/path/cola python bin/start_master.py --data /my/path/data如果不指定--data,那么数据文件会放置在项目根目录下的data文件夹。启动cola worker:python bin/start_worker.py --master  --data /my/path/data--data选项同master。如果不指定master,会询问是否连接到本机master,输入yes连接。最后使用bin下的coca.py来运行指定的Cola job:python bin/coca.py -m  -runLocalJob /to/path/cola/contrib/wiki-runLocalJob选项是要运行的job所在文件夹的绝对路径。输入命令后,该job会被提交到Cola集群来运行。停止Cola Job或集群停止整个集群,则可以运行:python bin/coca.py -m  -stopAll而停止一个Job,则需要查询得到Job的名称:python bin/coca.py -m  -showRunningJobsNames得到名称后,再运行:python bin/coca.py -m  -stopRunningJobByName 基于Cola实现的爬虫基于Cola实现的爬虫位于contrib/目录下。目前实现了四个爬虫:wiki:维基百科。weibo:新浪微博爬虫。从初始用户出发,然后是其关注和粉丝,依次类推,抓取指定个数的新浪微博用户的微博、个人信息、关注和粉丝。其用户微博只获取了内容、赞的个数、转发和评论的个数等等,而没有具体去获取此微博被转发和评论的内容。generic(unstable):通用爬虫,只需配置,而无需修改代码。目前Cola实现了一个抽取器(cola/core /extractor),能够从网页正文自动抽取主要内容,即去除类似边栏和底脚等内容。但是,此抽取器目前准确度还不够,效率也不够高,所以需要谨慎 使用。weibosearch(unstable):新浪微博搜索的爬虫。这个爬虫使用 cola.core.opener.SpynnerOpener,基于spynner实现了一个Opener能够执行JavaScript和Ajax代 码。目前这个爬虫存在的问题是:新浪微博可能会将其识别成机器人,因此有可能会让输入验证码。wiki和weibo之前有所提及。主要说明generic和weibosearch。对于generic来说,主要要修改的就是配置文件:job:   patterns:     - regex: http://blog.sina.com.cn/$       name: home       store: no       extract: no     - regex: http://blog.sina.com.cn/s/blog_.       name: article       store: yes       extract: yes其,regex表示要匹配的url的正则表达式;name是正则匹配的名称;store为yes时是存储这个网页,no为不存储;extract表示是否自动抽取网页正文,只有当store为yes的时候,extract才有作用。对于weibosearch,其使用了spynner来执行JavaScript和Ajax代码。所以需要确保以下依赖的安装:PyQt4(>=4.4.3)spynner如果你觉得可以基于cola实现一个比较通用的第三方爬虫,比如说腾讯微博等等,欢迎将此爬虫提交到contrib/。编写自定义Cola Job见wiki编写自定义Cola Job。架构和原理在Cola集群里,当一个任务被提交的时候,Cola Master和Worker会分别启动JobMaster和JobWorker。对于一个Cola Job,当JobWorker启动完成后,会通知JobMaster,JobMaster等待所有JobWorker启动完成后开始运行Job。在一个 Cola Job启动时,会启动一个消息队列(Message Queue,主要操作是put和get,worker抓取到的对象会被put到队列,而要抓取新的对象时,只要从队列取即可),每个 JobWorker上都存在消息队列节点,同时会有一个去重模块(bloom filter实现)。Cola还不够稳定,目前会处于持续改进的状态。且Cola还没有在较大规模的集群上测试,但是接下来我会把Cola应用到新项目,并逐步完善。也希望大家也能给我反馈,并帮助改进。Roadmap0.1版本正式推出前不会再增加新的功能了,主要目标让Cola更加稳定,并且提高cola/core/extractor的性能和精确度,完善contrib/generic和contrib/weibosearch。0.2版本计划:实现一个web接口,可以查看运行的cola job以及运行情况简化安装,支持easy_install或者pip安装。增加解决依赖库安装的机制。0.3版本计划:增加一个统一持久化抽象,支持保存到关系型数据库,MongoDB,文件系统,HDFS等等。0.4版本计划:支持Python 3 标签:Cola

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧