You may try:
(.*?)(ND_\d_)(Dist_\d_)(.*)
Explanation of the above regex:
(.*?)
- Represents first capturing group lazily matching everything before ND
.
(ND_\d_)
- Represents second cpaturing group matching ND_
followed by a digit. You can alter if digits are more than one like \d+
.
(Dist_\d_)
- Represents third capturing group matching Dist_
literally followed by a digit.
(.*)
- Represents fourth capturing group matching everything after greedily.
$1$3$2$4
- For the replacement part swap groups $3
and $2
to get your required result.

You can find the demo of the above regex in here.
Powershell Command for renaming the files:
PS C:\Path\To\MyDesktop\Where\Files\Are\Present> Get-ChildItem -Path . -Filter *.txt | Foreach-Object {
>> $_ | Rename-Item -NewName ( $_.Name -Replace '(.*?)(ND_\d_)(Dist_\d_)(.*)', '$1$3$2$4' )
>> }
Explanation of the above command:
1. Get-ChildItem - The Get-ChildItem cmdlet gets the items in one or more specified locations
2. -Path . - Represents a flag option for checking in present working directory.
3. -Filter *.txt - Represents another flag option which filters all the .txt files in present working directory.
4. Foreach-Object - Iterate over objects which we got from the above command.
4.1. Rename-Item -NewName - Rename each item
4.2. $_.Name -Replace - Replace the name of each item containing regex pattern with the replacement pattern.
5. end of loop