我正在编写一个python脚本来编辑.cpp和h的库。文件。由于unity3d和iOS本机插件的变幻莫测,我必须完全展平其目录结构。所以我必须浏览所有文件并更改它...(例如)
#include <Box2D/Dynamics/Joints/b2DistanceJoint.h>
到此..
#include <b2DistanceJoint.h>
所以我需要一个regex命令来删除&lt;之间的行中的任何文本。和最后一个/并且还删除了最后一个/。如果没有/那么没有任何事情发生(尽管如果需要我可以用if语句来做)
答案 0 :(得分:3)
使用此正则表达式<.*\/.*\/
在此验证输出:IDEONE
<强> CODE:强>
import re
text = """#include <Box2D/Dynamics/Joints/b2DistanceJoint.h>"""
#print text
print re.sub(r'<.*\/.*\/','<',text)
<强>输出:强>
#include <b2DistanceJoint.h>
答案 1 :(得分:2)
如果您愿意,可以在没有正则表达式的情况下解决此问题,在第一个<
字符和最后一个/
字符之间进行切片:
>>>s = "#include <Box2D/Dynamics/Joints/b2DistanceJoint.h>"
>>>s[:s.find('<')+1] + s[s.rfind('/')+1:]
'#include <b2DistanceJoint.h>'
当然,也许你偶然发现一条没有任何/
的行,在这种情况下我假设你想要保持原样,所以你可以添加一个{{1检查:
if
答案 2 :(得分:2)
试试这个:
code = '''#include <Box2D/Dynamics/Joints/b2DistanceJoint.h>
#include <Box2D/Dynamics/Joints/xyz.h> #include <Box2D/Dynamics/Joints/xyz.h>
#include <pqr.h>'''
code = re.sub("(?:(?<=^)|(?<=[\n\r]))#include\s+<[^>]*/", "#include <", code)
(?:(?<=^)|(?<=[\n\r]))
确保#include
仅位于该行的开头。因此,它不会触及另一个#include
正则表达式解释:
NODE EXPLANATION
--------------------------------------------------------------------------------
(?<= look behind to see if there is:
--------------------------------------------------------------------------------
^ the beginning of the string
--------------------------------------------------------------------------------
) end of look-behind
--------------------------------------------------------------------------------
| OR
--------------------------------------------------------------------------------
(?<= look behind to see if there is:
--------------------------------------------------------------------------------
[\n\r] any character of: '\n' (newline), '\r'
(carriage return)
--------------------------------------------------------------------------------
) end of look-behind
答案 3 :(得分:1)
您接受的正则表达式实际上不适用于以下字符串:
#include <Joints/b2DistanceJoint.h>
我提出了一个更像这样的正则表达式:
<[^>]*/
在代码中:
>>> import re
>>> text = """#include <Box2D/Dynamics/Joints/b2DistanceJoint.h>"""
>>> print re.sub(r"<[^>]*/", "<", text)
#include <b2DistanceJoint.h>