The value on the "left side" of a RewriteCond may not contain a pattern, only strings and/or variables.
There is little support for programmatic looping in .htaccess. It is not a sequentially-executed program or script, but rather a list of directives to be parsed by each of the Apache modules in turn.
How far does your "isbn1,isbn2,isbn3" sequence of directories go? If you mean that you have 20 or fewer "isbn" directories, then you could use a list:
RewriteCond %{DOCUMENT_ROOT}/$1/$2.php -f
RewriteRule ^books/(isbn1|isbn2|isbn3)/([^.]+)\.php$ /$1/$2.php [L]
If you mean that these isbn directories are sequentially-numbered from 1 to 23 (for example), then you could match "isbn" as a literal, and match the "numbers" as numeric characters:
RewriteCond %{DOCUMENT_ROOT}/isbn$1/$2.php -f
RewriteRule ^books/isbn([1-9]|1[0-9]|2[0-3])/([^.]+)\.php$ /isbn$1/$2.php [L]
However, if "isbn" is not a literal you have more than a few dozen such directories, then you need to consider changing your method of mapping URLs to scripts to products. That might be a good idea anyway, since it appears that you have a script for each "product" in each "isbn" directory, and that is hardly a sustainable approach for maintenance and growth of your site. A single-script-with-database (or CMS) approach would be probably be a lot easier to maintain and to grow. Instead of adding a script for each product, you'd add a database entry. And instead of checking for 'file exists' you'd just rewrite all 'product' requests to the script, and the script would check to see if a database entry existed for that 'product number'. If not, the script itself could return a 404 response, or it could return an offer to get that product if the viewer wanted to request it. I'm not a database expert, but this would seem to be a very good application for PHP+MySQL.
Jim