鱼C论坛

 找回密码
 立即注册
查看: 2669|回复: 4

[已解决]关于正则表达式处理字符串的问题

[复制链接]
发表于 2020-12-14 11:40:09 From FishC Mobile | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
我在用正则表达式处理字符串的时候遇到点问题,一直没有想明白怎么解决,请各位给指导一下。
我现在有以下字符串:
CMA_Rear_Door_plan_1856669_DC01_2p5mm
CMA_Rear_Door_LH_plan_18566659_DC01_0p5mm
CMA_Rear_Door_RH_plan_1856669_1p5mm_30CrMnTi
CX11_Rear_Door_Front_plan_1856669_3p5mm_PC_GF50
980010_Rear_Door_plan_1856669_0p8mm_PC_ABS

现在是想将上面的字符串分别将里面的2p5、0p5、1p5、3p5、0p8用正则表达式匹配出来,请问各位这个正则表达式要怎么写啊,头都快抓秃了。
最佳答案
2020-12-14 13:13:18
  1. import re

  2. s = """CMA_Rear_Door_plan_1856669_DC01_2p5mm
  3. CMA_Rear_Door_LH_plan_18566659_DC01_0p5mm
  4. CMA_Rear_Door_RH_plan_1856669_1p5mm_30CrMnTi
  5. CX11_Rear_Door_Front_plan_1856669_3p5mm_PC_GF50
  6. 980010_Rear_Door_plan_1856669_0p8mm_PC_ABS"""

  7. regex = re.compile("\dp\d")
  8. mo = regex.findall(s)
  9. print(mo)
复制代码

既然格式都是“数字p数字”那就比较简单了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-12-14 13:13:18 | 显示全部楼层    本楼为最佳答案   
  1. import re

  2. s = """CMA_Rear_Door_plan_1856669_DC01_2p5mm
  3. CMA_Rear_Door_LH_plan_18566659_DC01_0p5mm
  4. CMA_Rear_Door_RH_plan_1856669_1p5mm_30CrMnTi
  5. CX11_Rear_Door_Front_plan_1856669_3p5mm_PC_GF50
  6. 980010_Rear_Door_plan_1856669_0p8mm_PC_ABS"""

  7. regex = re.compile("\dp\d")
  8. mo = regex.findall(s)
  9. print(mo)
复制代码

既然格式都是“数字p数字”那就比较简单了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-14 19:33:36 | 显示全部楼层
Brick_Porter 发表于 2020-12-14 13:13
既然格式都是“数字p数字”那就比较简单了

我在外边这么测试也是可以正常的得到结果,但是我在对其他软件做二次开发的时候得到的都是空的列表,感觉特别奇怪,你能帮我看看我写的代码有啥问题不?
以下为测试用的代码:


  1. import re
  2. import ansa
  3. from ansa import base
  4. from ansa import constants
  5. from ansa import guitk

  6. #程序修饰器,生成一个分组和对应的脚本按钮,以及对脚本的一些介绍。
  7. @ansa.session.defbutton("测试专用","啥都有","专门用来测试的脚本")

  8. def TestAnything():
  9.        
  10.         TopWindow = guitk.BCWindowCreate("TITLE", guitk.constants.BCOnExitDestroy)
  11.         #创建一个窗口,并给窗口命名。
  12.         guitk.BCSetCaption(TopWindow, "功能")
  13.         #创建窗口选项
  14.         BCBoxLayout_1 = guitk.BCBoxLayoutCreate(TopWindow, guitk.constants.BCHorizontal)
  15.         BCLabel_1 = guitk.BCLabelCreate(BCBoxLayout_1, "选项 :")
  16.         CVals_0 = ("测试Prop","测试PropName")
  17.         BCComboBox = [guitk.BCComboBoxCreate(BCBoxLayout_1, CVals_0)]
  18.         guitk.BCComboBoxSetActivatedTextFunction(BCComboBox[0], _DeckTest, None)
  19.         #创建OK按钮和Cancel按钮
  20.         BCDialogButtonBox_1 = guitk.BCDialogButtonBoxCreate(TopWindow)
  21.         guitk.BCWindowSetAcceptFunction(TopWindow, _OkPressed, BCComboBox)
  22.         guitk.BCWindowSetRejectFunction(TopWindow, _CancelPressed, None)
  23.         guitk.BCShow(TopWindow)
  24.        
  25. def _DeckTest(combo, text, data):

  26.         print("你当前选的功能是 : "+text)
  27.         return 0
  28.        
  29. def _OkPressed(w, data):
  30.        
  31.         deck = guitk.BCComboBoxCurrentText(data[0])
  32.        
  33.         if deck == "测试Prop":
  34.                 print("选择需要测试的properties!")
  35.                 EntsType = ("SECTION_SHELL","SECTION_SOLID","SECTION_BEAM","SECTION_DISCRETE","SECTION_SEATBELT","SECTION_BEAM_ELFORM_6")  #定义一个单元类型的元组。
  36.                 base.SetPickMethod(base.constants.PID_SELECTION)  #通过PID来选择需要修改名字的Prop。
  37.                 Results_Prop = base.PickEntities(constants.LSDYNA, EntsType)  #将选择的对象保存到Results_Prop中。
  38.                

  39.                 for ent in Results_Prop:
  40.                        
  41.                         Prop = base.GetEntityCardValues(constants.LSDYNA,ent,("Name","PID","MID","T1","SECID","USER_SECID",)) #通过for循环将选中的对象名字提取出来。
  42.                        
  43.                         ProName = Prop["Name"]
  44.                         ProPID = Prop["PID"]
  45.                         ProMID = Prop["MID"]
  46.                         ProT = Prop["T1"]
  47.                         ProSecid = Prop["SECID"]
  48.                         ProUserSec = Prop["USER_SECID"]
  49.                        
  50.                         print(ProName)
  51.                         print(ProPID)
  52.                         print(ProMID)
  53.                         print(ProT)
  54.                         print(ProSecid)
  55.                         print(ProUserSec)


  56.         if deck == "测试PropName":
  57.                 print("选择需要测试的properties!")
  58.                 EntsType = ("SECTION_SHELL","SECTION_SOLID","SECTION_BEAM","SECTION_DISCRETE","SECTION_SEATBELT","SECTION_BEAM_ELFORM_6")  #定义一个单元类型的元组。
  59.                 base.SetPickMethod(base.constants.PID_SELECTION)  #通过PID来选择需要修改名字的Prop。
  60.                 Results_Prop = base.PickEntities(constants.LSDYNA, EntsType)  #将选择的对象保存到Results_Prop中。
  61.                

  62.                 for ent in Results_Prop:
  63.                        
  64.                         Prop = base.GetEntityCardValues(constants.LSDYNA,ent,("Name",)) #通过for循环将选中的对象名字提取出来。
  65.                        
  66.                         ProName = Prop["Name"]
  67.                        
  68.                         PropName = str(ProName)
  69.                        
  70.                         print(ProName)
  71.                         print(PropName)
  72.                        
  73.                        
  74.                         regex_name = re.compile("_\dp\d")
  75.                         thickness = regex_name.findall(PropName)
  76.                         print(thickness)
  77.                        

  78. def _CancelPressed(w, data):
  79.         print("搞完了,拜拜!!!")
  80.         return 1
复制代码



以下为输出的结果:

Reading script from :D:/ansa_scripts/test_000000.py
Generating code...
Code generation completed.
你当前选的功能是 : 测试PropName
选择需要测试的properties!
None
None
None
搞完了,拜拜!!!
Reading script from :D:/ansa_scripts/test_000000.py
Generating code...
Code generation completed.
你当前选的功能是 : 测试PropName
选择需要测试的properties!
None
搞完了,拜拜!!!
Reading script from :D:/ansa_scripts/test_000000.py
Generating code...
Code generation completed.
你当前选的功能是 : 测试PropName
选择需要测试的properties!
[]
搞完了,拜拜!!!
Reading script from :D:/ansa_scripts/test_000000.py
Generating code...
Code generation completed.
你当前选的功能是 : 测试PropName
选择需要测试的properties!
185023_LH_Dr_Fr_Reinf_Rear_Intru_2P2mm
[]
搞完了,拜拜!!!
Reading script from :D:/ansa_scripts/test_000000.py
Generating code...
Code generation completed.
你当前选的功能是 : 测试PropName
选择需要测试的properties!
185245_LH_Dr_Fr_Plate_Hinge_up_2P6mm
185245_LH_Dr_Fr_Plate_Hinge_up_2P6mm
[]
搞完了,拜拜!!!
Reading script from :D:/ansa_scripts/test_000000.py
Generating code...
Code generation completed.
你当前选的功能是 : 测试PropName
选择需要测试的properties!
185021_LH_Dr_Fr_Reinf_Front_Intr_2P3mm
185021_LH_Dr_Fr_Reinf_Front_Intr_2P3mm
[]
搞完了,拜拜!!!

软件自带的简易IDE

软件自带的简易IDE

软件界面截图

软件界面截图


使用的是该软件自带的简易IDE


帮忙看看是什么问题,非常感谢。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-14 22:13:28 | 显示全部楼层
倚楼听雨落 发表于 2020-12-14 19:33
我在外边这么测试也是可以正常的得到结果,但是我在对其他软件做二次开发的时候得到的都是空的列表,感觉 ...

有没有注意到P是大写的?重新调整一下正则然后试试
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2020-12-15 20:32:01 | 显示全部楼层
Brick_Porter 发表于 2020-12-14 22:13
有没有注意到P是大写的?重新调整一下正则然后试试

是我大意了,确实是因为这个的原因。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-30 08:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表