. : : ClassiClub ForuM : : .

会员中心 论坛帮助 日历事件 标记论坛已读
返回   精品技术论坛 » 技术论坛 » 『软件使用』 » 专题:命令正则

『软件使用』: 电脑软件推荐, 电脑软件使用, 经验分享



发表新主题 回复
 
主题工具
netsonic
 
netsonic 的头像
热心会员
 
资 料:
注册日期: Feb 2002
帖子: 14,934 声望值: 5
精华: 1,解答: 22
#1 旧 2019-01-19, 20:26:50 Icon15 【求助】如何用VBA或其他(例如Python)获取文本中特定字符?
netsonic 当前离线  

要获取的字符是以“https://v.qq.com/x/page/”,开始的网址
例如:“https://v.qq.com/x/page/n08227d6av4.html”

有个问题,每个这样的网址在文本里会出现两次,但结果只要一个,每个网址一行,不要引号。
上传的附件
文件类型: txt 网页源码.TXT (52.5 KB, 14 次查看)


出售 JBL RF610, 支持蓝牙立体声 | iGo蓝牙鼠标
回复时引用此帖
hefish
 
hefish 的头像
超级会员
 
资 料:
注册日期: Aug 2001
帖子: 1,348 声望值: 2
精华: 0,解答: 12
#2 旧 2019-01-19, 20:43:31 默认
hefish 当前离线  

用正则匹配一下,应该可以吧。


Email: hefish at gmail dot com
QQ: 831031
Mobile: +86.13063985131
回复时引用此帖
antony
 
antony 的头像
热心会员
 
资 料:
注册日期: Oct 2001
帖子: 751 声望值: 6
精华: 0,解答: 1
#3 旧 2019-01-19, 21:35:33 默认
antony 当前离线  

正则。。。。

<strong.*?href="(https://v.qq.com/x/page/.*?.html)"

取获取的值的group[1]
回复时引用此帖
aspirer
 
aspirer 的头像
支柱会员
 
资 料:
注册日期: Feb 2011
帖子: 4,905 声望值: 4
精华: 1,解答: 22
#4 旧 2019-01-19, 23:54:36 默认
aspirer 当前离线  

代码丑一点,凑合先用一下吧. 已去重复的URL
python

代码:
import re

txt=r"G:\\TEMP\网页源码.TXT"
with open(txt) as f:
    url_list=[]
    for line in f:
        urls =  re.findall('http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+', line)
        if urls: 
            urls=[x for x in urls if 'https://v.qq.com/x/page/' in x]
            url_list.extend(urls)
    print(list(set(url_list)))
    
    #要一行一个再用下面的打印下
    for x in url_list:
        print(x)

此帖于 2019-01-19 23:59:18 被 aspirer 编辑. .


朋友,你好……
回复时引用此帖
netsonic
 
netsonic 的头像
热心会员
 
资 料:
注册日期: Feb 2002
帖子: 14,934 声望值: 5
精华: 1,解答: 22
#5 旧 2019-01-20, 10:12:30 默认
netsonic 当前离线  

引用:
作者: aspirer 查看帖子
代码丑一点,凑合先用一下吧. 已去重复的URLpython[CODE]import retxt=r"G:\\TEMP\网页源码.TXT"with open(txt) as f: url_list=[] for line in f: urls = re.findall('h......
网页源码.TXT放在F盘根目录下,
Python 3.7.1 IDLE打开code.py,没反应啊。
上传的图像
文件类型: png 1.png (27.9 KB, 109 次查看)
上传的附件
文件类型: zip code.zip (475 字节, 0 次查看)
回复时引用此帖
dodowolf
 
dodowolf 的头像
热心会员
 
资 料:
注册日期: Sep 2002
帖子: 3,042 声望值: 5
精华: 0,解答: 9
#6 旧 2019-01-20, 13:47:53 默认
dodowolf 当前离线  

引用:
作者: netsonic 查看帖子
网页源码.TXT放在F盘根目录下,
Python 3.7.1 IDLE打开code.py,没反应啊。
菜单 Run->Run Module
回复时引用此帖
netsonic
 
netsonic 的头像
热心会员
 
资 料:
注册日期: Feb 2002
帖子: 14,934 声望值: 5
精华: 1,解答: 22
#7 旧 2019-01-20, 18:27:43 默认
netsonic 当前离线  

引用:
作者: dodowolf 查看帖子
菜单 Run->Run Module
Traceback (most recent call last):
File "F:\code.py", line 6, in <module>
for line in f:
UnicodeDecodeError: 'gbk' codec can't decode byte 0xbf in position 2: illegal multibyte sequence
回复时引用此帖
dodowolf
 
dodowolf 的头像
热心会员
 
资 料:
注册日期: Sep 2002
帖子: 3,042 声望值: 5
精华: 0,解答: 9
#8 旧 2019-01-21, 12:00:34 默认
dodowolf 当前离线  

引用:
作者: netsonic 查看帖子
Traceback (most recent call last):
File "F:\code.py", line 6, in <module>
for line in f:
UnicodeDecodeError: 'gbk' codec can't decode byte 0xbf in positio...
代码:
package main

import (
	"bufio"
	"fmt"
	"log"
	"os"
	"strings"
)

func main() {
	var filePath string;
	pattern := "https://v.qq.com/x/page/"
	if len(os.Args) > 1 {
		filePath = os.Args[1]
	}
	if len(os.Args) > 2 {
		pattern = os.Args[2]
	}
	if len(filePath) == 0 {
		fmt.Println("No file path specified")
		return
	}

	fFile, err := os.Open(filePath)
	if err != nil {
		panic(err)
	}
	defer fFile.Close()

	scanner := bufio.NewScanner(fFile)
	urls := map[string]struct{}{}

	for scanner.Scan() {
		text := scanner.Text()
		if pos:=strings.Index(text, pattern); pos > 0 {
			endpos := strings.Index(text[pos:], "\"")
			url := text[pos:pos+endpos]
			if _, ok := urls[url]; !ok {
				fmt.Println(url)
				urls[url] = struct{}{}
			}
		}
	}

	if err := scanner.Err(); err != nil {
		log.Fatal(err)
	}

}
extracturl 文件名 <可选的 前缀>
上传的附件
文件类型: rar ExtractUrl.rar (937.2 KB, 0 次查看)
回复时引用此帖
aspirer
 
aspirer 的头像
支柱会员
 
资 料:
注册日期: Feb 2011
帖子: 4,905 声望值: 4
精华: 1,解答: 22
#9 旧 2019-01-22, 22:41:45 默认
aspirer 当前离线  

引用:
作者: netsonic 查看帖子
网页源码.TXT放在F盘根目录下,
Python 3.7.1 IDLE打开code.py,没反应啊。
我这一切正常啊。

可能1是头部我没有加。
2有可能是文件编码问题。
先加上头部 # -*- coding: utf-8 -*-试试。
不行,就 加上 encoding='gbk'
即那一行换成 with open(txt,encoding='gbk') as f:

代码:
# -*- coding: utf-8 -*-
"""
Created on Sat Jan 19 23:31:51 2019

@author: aspirer
"""

import re

txt=r"G:\\TEMP\网页源码.TXT"
with open(txt) as f:
    url_list=[]
    for line in f:
        urls =  re.findall('http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+', line)
        if urls: 
            urls=[x for x in urls if 'https://v.qq.com/x/page/' in x]
            url_list.extend(urls)
    #print(list(set(url_list)))

    #要一行一个用下面的打印
    for x in url_list:
        print(x)
回复时引用此帖
发表新主题 回复

主题工具

论坛规则  发帖规则
不可以发表主题
不可以回复帖子
不可以上传附件
不可以编辑自己的帖子
论坛启用 vB 代码
版面启用 表情符号
版面启用 [IMG] 代码
版面禁用 HTML 代码


所有时间均为北京时间, 现在的时间是 21:44:42.

本论坛带宽由迅通网络提供
SSL证书由TrustAsia提供

Copyright © 2000 - 2019 ClassiClub Forum All Rights Reserved.
粤ICP备09123456号