如何使用正则表达式查找具有特定起始字符串的所有匹配项? [复制]

Posted

技术标签:

【中文标题】如何使用正则表达式查找具有特定起始字符串的所有匹配项? [复制]【英文标题】:How to use a regular expression to find all matches with specific starting strings? [duplicate] 【发布时间】:2020-03-09 11:38:10 【问题描述】:

我已经使用 bs4 爬取了一些文本,我想找到与以下起始字符串匹配的所有 url: https://www.104.com.tw/company/

例如,“https://www.104.com.tw/company/aw5oe14?jobsource=checkc”和“https://www.104.com.tw/company/18sepdbk?jobsource=check”

我对RegEx不熟悉并尝试过:

raw = get_page("https://www.104.com.tw/cust/list/index/?page=2&keyword=%E8%87%AA%E5%8B%95%E5%8C%96&order=1&mode=s&jobsource=checkc")
address = re.findall(r'https://www.104.com.tw/company/[\w]+',raw)
print(address)

# where raw is the text crawled, and get_page is function, both of them work correctly. 

显示错误为:

TypeError                                 Traceback (most recent call last)
<ipython-input-18-387fb92bcd6d> in <module>
      1 raw = get_page("https://www.104.com.tw/cust/list/index/?page=2&keyword=%E8%87%AA%E5%8B%95%E5%8C%96&order=1&mode=s&jobsource=checkc")
----> 2 address = re.findall(r'https://www.104.com.tw/company/.*$',raw)
      3 print(address)

/opt/conda/envs/Python36/lib/python3.6/re.py in findall(pattern, string, flags)
    220 
    221     Empty matches are included in the result."""
--> 222     return _compile(pattern, flags).findall(string)
    223 
    224 def finditer(pattern, string, flags=0):

TypeError: expected string or bytes-like object

我应该使用什么正则表达式,或者如果这是 re.findall 语法的问题?

谢谢,

【问题讨论】:

【参考方案1】:

最简单的是:

https://www\.104\.com\.tw/company/.+

Regex Demo

在您使用 [\w]+ 的原始正则表达式中,这将与整个字符串不匹配,因为 ? 不是 \w(即 [a-zA-Z0-9_])集合的一部分。

【讨论】:

以上是关于如何使用正则表达式查找具有特定起始字符串的所有匹配项? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

Lua 正则表达式

如何使用 JS 正则表达式查找所有不匹配字符的索引?

如何使用正则表达式

小记linux正则表达式

如何在Linux下查找文件内容包含某个特定字符串的文件

如何使用正则表达式匹配所有数字字符和一些单个字符