I'm trying to clean up some assembly code and I'd like to convert the spaces between the instruction and argument to tabs. However, I'd like to avoid inadvertently converting the spaces between the words in the comments after the semicolon.

So here is an example some lines of code:

```
label:          bcf INTCON,2                ; comment comment and more comment.
                btfss PORTA,2

```

The closest I've come is `(?<=^).+(?=;)`. This not only matches EVERYTHING between the beginning of the line and the semicolon, but it includes all semicolons except for the very last semicolon. Imagine lines of codes with comments that was commented out. It also doesn't take into consideration line without comments.

How do I do this?