我的问题是this one的延续。基本上,我有一个像这样的单词表:
HAT18178_890909.098070313.1
HAT18178_890909.098070313.2
HAT18178_890909.143412462.1
HAT18178_890909.143412462.2
就我的目的而言,我不需要终端.1
或.2
来获取这组名称。我可以手动编写以下正则表达式(使用Python语法):
r = re.compile('(.*\.\d+)\.\d+')
但是,我不能保证我的下一组名称将具有类似的结构,其中最后2个字符将是可丢弃的 - 它可以是3个字符(即.12
)并且分隔符也可以改变(即.
到_
)。
明确学习正则表达式或确定哪些字符不必要的适当方法是什么?
答案 0 :(得分:1)
这是一个有趣的问题。
X y
HAT18178_890909.098070313.1 HAT18178_890909.098070313
HAT18178_890909.098070313.2 HAT18178_890909.098070313
HAT18178_890909.143412462.1 HAT18178_890909.143412462
HAT18178_890909.143412462.2 HAT18178_890909.143412462
问题是没有一个解决方案,但很多。
即使是人类,也不清楚你想要什么样的正则表达式。
根据这些数据,我认为学习的可能性是:
只需匹配固定宽度25:.{25}
修正了第一部分:HAT18178_890909.
然后:
每个单独的位置只有2个不同的数字(因为你显示2个案例)。
所以例如[01]
(0或1),[94]
下一个点等等将是一个很好的解决方案。
显而易见的是\d+
但它也可能是\d{9}
你知道,有多个正确答案。
如果第二个点是下划线,那么这些正则表达式仍然有用。
我的结论:
问题在于,为机器学习准备数据要比创建正则表达式要多得多。如果你想确保覆盖所有内容,你需要有完整的数据,那么正则表达式可能会减少工作量。
答案 1 :(得分:-1)
您可以拆分非字母数字字符;
[^a-zA-Z0-9']+
在这种情况下,在这种情况下,你会得到这样的字符串:
HAT18178
890909
098070313
1
从那里你可以简单地丢弃最后一个,如果这是必要的,并继续处理第一个序列