RegEx-查找某些字符串的双重条件

时间:2019-02-06 07:33:30

标签: regex

我想在以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”

Example...

3 个答案:

答案 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