Fix performance in get_imports regexp
Author: AlekseyLobanov
Pull request: yes

# What does this PR do?

Just found that one of the Regular Expressions may be very slow (O(N^3)) on some special inputs.

Something like `'try:' + ' ' * 1500` may take a lot of time. I replaced it with the same logic but faster


## Before submitting
- [x] This PR fixes a typo or improves the docs (you can dismiss the other checks if that's the case).
- [ ] Did you read the [contributor guideline](https://github.com/huggingface/transformers/blob/main/CONTRIBUTING.md#create-a-pull-request),
      Pull Request section?
- [ ] Was this discussed/approved via a Github issue or the [forum](https://discuss.huggingface.co/)? Please add a link
      to it if that's the case.
- [ ] Did you make sure to update the documentation with your changes? Here are the
      [documentation guidelines](https://github.com/huggingface/transformers/tree/main/docs), and
      [here are tips on formatting docstrings](https://github.com/huggingface/transformers/tree/main/docs#writing-source-documentation).
- [ ] Did you write any new necessary tests?


## Who can review?

@gante


<!-- Your PR will be replied to more quickly if you can figure out the right person to tag with @

 If you know how to use git blame, that is the easiest way, otherwise, here is a rough guide of **who to tag**.
 Please tag fewer than 3 people.

Models:

- text models: @ArthurZucker
- vision models: @amyeroberts, @qubvel
- speech models: @ylacombe, @eustlb
- graph models: @clefourrier

Library:

- flax: @sanchit-gandhi
- generate: @zucchini-nlp (visual-language models) or @gante (all others)
- pipelines: @Rocketknight1
- tensorflow: @gante and @Rocketknight1
- tokenizers: @ArthurZucker
- trainer: @muellerzr and @SunMarc
- chat templates: @Rocketknight1

Integrations:

- deepspeed: HF Trainer/Accelerate: @muellerzr
- ray/raytune: @richardliaw, @amogkam
- Big Model Inference: @SunMarc
- quantization (bitsandbytes, autogpt): @SunMarc

Documentation: @stevhliu

HF projects:

- accelerate: [different repo](https://github.com/huggingface/accelerate)
- datasets: [different repo](https://github.com/huggingface/datasets)
- diffusers: [different repo](https://github.com/huggingface/diffusers)
- rust tokenizers: [different repo](https://github.com/huggingface/tokenizers)

Maintained examples (not research project or legacy):

- Flax: @sanchit-gandhi
- PyTorch: See Models above and tag the person corresponding to the modality of the example.
- TensorFlow: @Rocketknight1

 -->


Comments:
It is not a typo but still a small change with existing tests

This looks good now! It should be simpler and more performant, and shouldn't change which strings it matches.

I have one more suggestion, though. This regex looks like it would fail in cases when the strings "try" and "except" occur internally in some lines. This is probably very rare, but maybe we should change the regex to `\n\s*try` and `\n\s*except` to be secure against that?

To be clear, this isn't a bug with your PR - it's an issue with the regex that already existed!

>regex looks like it would fail in cases ...

Any regex should fail because even valid Python source is not defined by a regular language.
For example, code below also should be ignored, I believe.

```python
"""
try:
    pass
except:
    pass
"""
# code in multi line string literal
```

Should I add it in another PR with more tests? This PR is more about performance improvements.

Maybe we can wait for @gante to reply, because he wrote this lines.

>Want me to merge this one now, and if you think you can improve it further, you can open a new PR with added test(s)?

Can we just merge this for now? It will be great.


> Maybe we can wait for @gante to reply, because he wrote this lines.

Hehe not true (https://github.com/huggingface/transformers/pull/23725 is the source of these lines), but the diff looks good to me :)

Yes, the diff looks good to me. Thanks for the PR!