import re
def process_PartNo( text) :
return re .sub ( r'(?:PartNoId\s +)?(PartNo-)' , r'PartNoId \1 ' , text, flags= re .I )
#######################################################################################
text1 = 'PartNo-001A description 20 units some other description'
text2 = 'PartNoId PartNo-001A description QtyOrd 20 some other description'
text3 = '''
PartNoId
PartNo-001A description QtyOrd 20'
'''
text4 = '''
PartNoId
PartNo-001A description QtyOrd 20'
'''
text5 = '''
PartNoId PartNo-001A description QtyOrd 20 some other description
PartNoId PartNo-002A description QtyOrd 20 some other description
'''
text6 = '''
PartNo-001A description QtyOrd 20 some other description
PartNo-002A description QtyOrd 20 some other description
'''
###########################################################################
print ( process_PartNo( text1) )
print ( process_PartNo( text2) )
print ( process_PartNo( text3) )
print ( process_PartNo( text4) )
print ( process_PartNo( text5) )
print ( process_PartNo( text6) )
aW1wb3J0IHJlCmRlZiBwcm9jZXNzX1BhcnRObyh0ZXh0KTogICAgCiAgICByZXR1cm4gcmUuc3ViKHInKD86UGFydE5vSWRccyspPyhQYXJ0Tm8tKScsIHInUGFydE5vSWQgXDEnLCB0ZXh0LCBmbGFncz1yZS5JKQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKdGV4dDEgPSAnUGFydE5vLTAwMUEgZGVzY3JpcHRpb24gMjAgdW5pdHMgc29tZSBvdGhlciBkZXNjcmlwdGlvbicKdGV4dDIgPSAnUGFydE5vSWQgUGFydE5vLTAwMUEgZGVzY3JpcHRpb24gUXR5T3JkIDIwIHNvbWUgb3RoZXIgZGVzY3JpcHRpb24nCnRleHQzID0gJycnClBhcnROb0lkClBhcnROby0wMDFBIGRlc2NyaXB0aW9uIFF0eU9yZCAyMCcKJycnCnRleHQ0ID0gJycnClBhcnROb0lkCgpQYXJ0Tm8tMDAxQSBkZXNjcmlwdGlvbiBRdHlPcmQgMjAnCicnJwp0ZXh0NSA9ICcnJyAKUGFydE5vSWQgUGFydE5vLTAwMUEgZGVzY3JpcHRpb24gUXR5T3JkIDIwIHNvbWUgb3RoZXIgZGVzY3JpcHRpb24KUGFydE5vSWQgUGFydE5vLTAwMkEgZGVzY3JpcHRpb24gUXR5T3JkIDIwIHNvbWUgb3RoZXIgZGVzY3JpcHRpb24gCicnJwp0ZXh0NiA9ICcnJyAKUGFydE5vLTAwMUEgZGVzY3JpcHRpb24gUXR5T3JkIDIwIHNvbWUgb3RoZXIgZGVzY3JpcHRpb24KUGFydE5vLTAwMkEgZGVzY3JpcHRpb24gUXR5T3JkIDIwIHNvbWUgb3RoZXIgZGVzY3JpcHRpb24gCicnJwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKcHJpbnQocHJvY2Vzc19QYXJ0Tm8odGV4dDEpKQpwcmludChwcm9jZXNzX1BhcnRObyh0ZXh0MikpCnByaW50KHByb2Nlc3NfUGFydE5vKHRleHQzKSkKcHJpbnQocHJvY2Vzc19QYXJ0Tm8odGV4dDQpKQpwcmludChwcm9jZXNzX1BhcnRObyh0ZXh0NSkpCnByaW50KHByb2Nlc3NfUGFydE5vKHRleHQ2KSk=