我想在$urls[] = 'http://site1.com';
$urls[] = 'http://site2.com';
foreach($urls as $url) {
$output = getMainPage($url, $zids, $listing_count, array(), array());
}
print_r($output); //Line 1
function getMainPage($url, $zids, $listing_count, $ids = array(), $names = array()) {
$dom = new DOMDocument;
@$dom->loadHTML($html);
$links = $dom->getElementsByTagName('a');
$output_html = '';
foreach ($links as $link){
print_r($ids); //Line 2
$output['ids'][] = $this_id;
$output['$names'][] = $this_name;
$listing_count++;
$output['listing_count'] = $listing_count;
if(strpos($href, 'next') !== FALSE) {
$url = $next_url;
$o = getMainPage($url, $output['zids'], $output['listing_count'], $output['ids'], $output['names']);
$output['ids'] = array_merge($output['ids'], $o['ids']);
$output['names'] = array_merge($output['names'], $o['names']);
}
}
return $output;
这样的正则表达式中将ー
替换为-
。我试过了\d+(ー)\d+(ー)\d+
,但它会替换包括数字在内的所有文字。是否可以仅替换括号中的单词?
e.g。
re.sub
返回sub('\d+(ー)\d+(ー)\d+','4ー3ー1','-')
。假设不能使用简单的'4-3-1'
,因为有其他replace
不满足正则表达式。我目前的解决方案是拆分文本并在满足正则表达式的部分进行替换。
答案 0 :(得分:1)
您可以使用repl
中re.sub
参数的函数来触摸匹配组。
import re
s = '1234ー2134ー5124'
re.sub("\d+(ー)\d+(ー)\d+", lambda x: x.group(0).replace('ー', '-'), s)
使用略有不同的模式,您可以利用超前表达式,该表达式不会消耗它匹配的字符串部分。也就是说,前瞻/后瞻将匹配一个模式,条件是它也匹配前瞻/后瞻表达式中的组件(而不是整个模式。)
re.sub("ー(?=\d+)", "-", s)
如果你可以使用emdash之前部分的固定长度表达式,你可以将前瞻与后瞻相结合,使正则表达式更加保守。
re.sub("(?<=\d)ー(?=\d+)", "-", s)
答案 1 :(得分:1)
您可以在此处使用群组参考。
import re
before = '4ー3ー1ーー4ー31'
after = re.sub(r'(\d+)ー(\d+)ー(\d+)', r'\1-\2-\3', before)
print(after) # '4-3-1ーー4ー31'
这里,r'\1'
是第一组的引用,a.k.a,第一个括号。
答案 2 :(得分:0)
re.sub('\d+(ー)\d+(ー)\d+','4ー3ー1','-')
正如您所指出的,正则表达式的输出将为“ - ”。因为你试图用' - '替换整个模式。将ー替换为 - 你可以使用
import re
input_string = '4ー3ー1'
re.sub('ー','-', input_string)
或者你可以在数字上找到所有数字并使用' - '
连接字符串'-'.join(re.findall('\d+', input_string))
这两种方法都应该给你'4-3-1'