我想在以RADU3_
开始并以RADU3-
结尾的句子中找到单词xlink:href=
或.svg
如何执行此操作? 我已经尝试过追踪,但是没有给出期望的结果。
(?= \ w xlink:href = | \ w svg \ b)| \ bRADU3_ | \ bRADU3-
示例中的最后一行是好的结果(RADU3_
)
ProductionGraphics \ GP1 ** RADU3-** 11_HeatingFurnaceF1.svg PB:ExpressionText id =“ RADU3_FUEL GAS _SUM_EX” PBD:LinkUses xlink:href =“ C:\ ProcBookImport \ MaintenanceGraphics \ RADU3_AI.svg”
答案 0 :(得分:0)
不确定确切如何使用它,但是以下模式找到了字符串。我将RADU3部分放在与RADU3相匹配的组中,后跟-或_([_-]
)
(xlink:href=.*)(RADU3[_-]*)(.*\.svg)
编辑,处理多个事件
如果一个字符串可能多次包含该模式,则使用?
允许组重复自身
(RADU3[_-]*?)(.*?\.svg?)
以上内容可用于替换表达式,例如
\1someotherword\3
其中\ 2是第二组被替换的
答案 1 :(得分:0)
听起来好像您只想要特定上下文中的单词(子字符串)?
在您的情况下,如果要为字符串设置开始条件和结束条件(多个条件),则可以在中间重新启动正则表达式,但同时只想将这些条件用作“ if语句”而不是结果的一部分。
以下使用此方法,并利用重新启动(\K
)以便仅提取您要查找的子字符串。
# The string has to start with "xlink:href="
xlink:href=
# Fetch everything up to our match, and the restart the regex
.*\K
# The strings we are looking for
(RADU3[-_])
# String has to end with ".svg"
(?=(.*\.svg))
如果您希望整个字符串与我们的规则匹配,那么您正在寻找这样的东西:
#The string has to start with "xlink:href"
^(xlink:href=).*
# The strings we are looking for
(RADU3[-_])
# String has to end with ".svg"
(\w+\.svg)
#Get everything after .svg too
.*
如果您只想在.svg之后加上结尾"
,则需要修改最后一部分,即我只将.svg之后的所有内容
您可以玩我在regex101上提出的建议(无隶属关系,只喜欢他们的网站):https://regex101.com/r/g0v07V/3/
答案 2 :(得分:0)
如果要确保字符串以xlink:href=
开头并以\.svg
结尾,则可以使用锚点来声明字符串的开头^
和结尾$
。字符串。
使用1个捕获组来确保xlink:href=
在RADU3之前,然后是下划线或连字符。然后,您可以将其匹配,并在替换使用中使用替换捕获的捕获组。
您可以使用正向先行断言该字符串以\.svg
结尾
这将匹配:
^(xlink:href=.*)\bRADU3[_-](?=.*\.svg$)
^
断言字符串的开头(xlink:href=.*)
捕获组,匹配直到最后一次出现.. \bRADU3[_-]
单词边界,以防止匹配较大单词的一部分。匹配RADU3,后跟下划线或连字符(?=.*\.svg$)
肯定声明字符串的前瞻以.svg
请参见regex demo