4 AAs would probably be marginal, as soon as they dropped a little you'd be out of voltage. 5 would be okay. You could power the arduino from batteries 1-3 (4.5V into VCC, not Vin), and the segments from batteries 1-5 (7.5v). I have used 3 AAs like this, the arduino was still going well at 4.25V.
So if you had 5 batteries, thats 7.5V, less say 6.5V for a segment, that's 1V across the resistor and transistor of the shift register, so you'd see maybe 0.5V across the resister.
So with ohms law, V=IR, V/I = R => 0.5V/0.02A = 25 ohms. 27 or 33 are standard values.
You need a resister per segment of each LED if you are using shift registers. More below on why 1 resister per segment.
If you had all segments on in 1 digit, that would be 140mA.
How many digits were you planning on? I don't recall.
You have 3 wires going from the arduino to the shft registers, assuming you have the output of one shift register feeding the input of the next. The shift_out_clock goes to each part. The shift_data_out goes to part1, its output goes to part 2, etc.
To prevent a bunch of flickering while all this shifting is going on, you also have a load_data line that moves the data from the input shift register to the output drive pin so all the displays update at once. Then you shiftout bytes until all digits are shifted, and toggle the load line to update the outputs.
The other option is to use more wires, and shift to each digit individually.
Have a common shift_data_out, shift_clock, but individual load_data to each part for the actual output update.
Wire up your shift register - which one are you using? tpic6b595 open drain shift register, which can take higher output voltages (the voltage will go up to the battery voltage when the pin is high)? Or a standard TTL/CMOS part, in which case you will need an NPN transistor like I showed in an earlier post.
Select the mapping you want to use, maybe this:
bit 7 = decimal point
bit 6 = segment G
bit 5 = F
bit 4 = E
bit 3 = D
bit 2 = C
bit 1 = B
bit 0 = segment A
Then to turn on a segment, a bit = LOW will equal a segment turned on for the tpic6b595,
or if the shift register drives a transisor as shown earlier, a bit = HIGH will equal a segment turned on.
Lets go with HIGHs:
for #1, data out for a shift register would be 0B00000110 for segments B & C
for #0, 0B00111111 for segments A,B,C,D,E,F
for #7, 0B00000111 for segments A,B,C and so on.
for L, 0B00111000 for segments D,E,F, and so on.
You have 7.5V going to the common ANODE of each digit, the segments go thru resistors to the shift register, the battery- goes to the arduino ground.
You could try just 1 resister between the 7.5V and the ANODE of each digit, but you will find the segments changing brightness as the different segments turn on & off. 1 or 2 segments vs 5,6,7 segments all sharing the same 20mA, you see? And you have to limit for the least amount of segments on so you don't burn it out.