Regular Expression to find a string included between two characters, while EXCLUDING the delimiters
的扩展名该问题的解决方案稍作修改:
(?<=\#)(.*?)(?=\#)
给出一个字符串#34; #iPhone 4#由#apple#。&#34;该解决方案返回:
[&#34; iPhone 4&#34;,&#34;由&#34;,&#34; apple&#34;]
制作现在我不确定这是否只能使用正则表达式,但在这种情况下&#34;是由&#34;不应该被退回。它只是在另外两个##包裹的字符串之间被压扁,所以它自己被包裹。
澄清:正则表达式需要在父字符串中支持可变数量的#foo#字符串。不会总是只有2个。
由于反应各种各样,并且认识到这个问题在没有正则表达式的情况下更容易解决,我投票结束了这个问题。答:使用您选择的语言,不使用正则表达式执行此操作。
答案 0 :(得分:1)
非常接近@Gerben,但对我来说工作:(在令牌之前应该有一些奇怪的'#'(包括启动令牌的'#'))
(?<=^[^#]*#([^#]*#[^#]*#)*)([^#]*)(?=#)
在处理之前,你不能只取(?<=\#)(.*?)(?=\#)
并忽略匹配列表中的所有其他匹配??
答案 1 :(得分:0)
而不是.*
使用[^\]*]
(如果]是dellimeter
<强> EDITED 强>
所以你有一个列表#text#,#text#,..并想要解析列表项
(\#[^\#]*\#[,$])+
答案 2 :(得分:0)
解决方案不会返回你所说的内容(它正在使用方括号而不是哈希标记),但这是你在括号中加入的问题;括号是指导捕获的原因。
#([^#]*)#[^#]*#([^#]*)#
答案 3 :(得分:0)
我对正则表达式不够熟悉,无法为您提供正则表达式答案。但似乎你的列表中的每一项都要被丢弃。为什么不迭代列表并做到这一点?
我就是这样做的:
text = "The #iPhone 4# is made by #apple#"
cleanlist = list(match.strip('#') for match in re.findall('#.*?#', text, re.UNICODE))
print cleanlist
>>> ['iPhone 4', 'apple']
答案 4 :(得分:0)
不确定这是否有效,但想法是它只匹配第一个#如果前面有偶数#字符。
(?<=(?:^[^#]*#[^#]*#)*#)([^#]*)(?=#)
但是你使用的语言是什么?因为不使用正则表达式会更容易做到
答案 5 :(得分:0)
零宽度断言导致匹配在所有分隔符之间包含文本,而不是在每个“消耗”分隔符后继续。您必须更改执行匹配的代码,以便它提取(例如)第一个捕获组,而不是整个匹配的表达式。如果您发布了现在使用的代码,这将有所帮助,所以我们可以告诉您如何修改它,但您的示例是以Pythonesque方式格式化的,所以像这样;
stringlist = re.findall("#([^#]*)#", string)
抱歉,不是在我的电脑上,而且我的Python不是很好,所以我可能不得不回复你。
更新:修复并大大简化了代码