寻找有关编写正则表达式的帮助,以捕获特定字符串是否以某些字符串开头并捕获开始和剩余字符串。例如 假设字符串可能的开头是'P','RO','RPX',样本字符串是'PIXR'或'ROXP'或'RPX'。 我正在寻找一个正则表达式,它捕获字符串的开始和结尾部分,如果它以给定的可能字符串开头,例如 'PIXRT'=〜//输出'P'和'IXRT'
不熟悉正则表达式,所以我们非常感谢任何帮助。
答案 0 :(得分:5)
您可以使用具有2个捕获组的正则表达式,一个捕获组在开始时捕获已知值,其余的将捕获字符串的其余部分:
rx = /\A(RPX|RO|P)(.*)/m
"PIXRT".scan(rx)
# => [P, IXRT]
请参阅Ruby demo
<强>详情:
\A
- 字符串开头(RPX|RO|P)
- 必须在字符串开头的值之一(请注意这些替代品的顺序:较长的值首先出现!)(.*)
- 字符串末尾的任何0 +字符(m
修饰符也会使.
匹配换行符。)答案 1 :(得分:1)
def split_after_start_string(str, *start_strings)
a = str.split(/(?<=\A#{start_strings.join('|')})/)
if a.size == 2
a
elsif start_strings.include?(str)
a << ''
else
nil
end
end
start_strings = %w| P RO RPX | #=> ["P", "RO", "RPX"]
split_after_start_string('PIXR', *start_strings) #=> ["P", "IXR"]
split_after_start_string('IPXR', *start_strings) #=> nil
split_after_start_string('ROXP', *start_strings) #=> ["RO", "XP"]
split_after_start_string('RPX', *start_strings) #=> ["RPX", ""]
正则表达式读取,“在正面看后面的字符串开头匹配start_stringx
的一个元素”。对于示例中的smart_strings
,正则表达式为:
/(?<=\A#{start_strings.join('|')})/ #=> /(?<=\AP|RO|RPX)/