在Perl中,如何使用一个正则表达式分组来捕获多个匹配它的事件到多个数组元素?
例如,对于字符串:
var1=100 var2=90 var5=hello var3="a, b, c" var7=test var3=hello
Run Code Online (Sandbox Code Playgroud)
用代码处理这个:
$string = "var1=100 var2=90 var5=hello var3=\"a, b, c\" var7=test var3=hello";
my @array = $string =~ <regular expression here>
for ( my $i = 0; $i < scalar( @array ); $i++ )
{
print $i.": ".$array[$i]."\n";
}
Run Code Online (Sandbox Code Playgroud)
我想看看输出:
0: var1=100
1: var2=90
2: var5=hello
3: var3="a, b, c"
4: var7=test
5: var3=hello
Run Code Online (Sandbox Code Playgroud)
我会用什么作为正则表达式?
我想在这里匹配的东西之间的共性是一个赋值字符串模式,所以类似于:
my @array = $string =~ m/(\w+=[\w\"\,\s]+)*/;
Run Code Online (Sandbox Code Playgroud)
其中*表示与该组匹配的一个或多个事件.
(我使用split()打折,因为有些匹配本身包含空格(即var3 ...),因此不会产生预期的结果.)
有了上面的正则表达式,我只得到:
0: var1=100 var2
Run Code Online (Sandbox Code Playgroud)
正则表达式是否可能?还是需要添加代码?
在查找"perl regex …
SELECT NR_DZIALU, COUNT (NR_DZIALU) AS LICZ_PRAC_DZIALU
FROM PRACOWNICY
GROUP BY NR_DZIALU
HAVING NR_DZIALU = 30
Run Code Online (Sandbox Code Playgroud)
要么
SELECT NR_DZIALU, COUNT (NR_DZIALU) AS LICZ_PRAC_DZIALU
FROM PRACOWNICY
WHERE NR_DZIALU = 30
GROUP BY NR_DZIALU
Run Code Online (Sandbox Code Playgroud) 我想分组列表的元素.我现在这样做:
public static <E> List<List<E>> group(final List<E> list, final GroupFunction<E> groupFunction) {
List<List<E>> result = Lists.newArrayList();
for (final E element : list) {
boolean groupFound = false;
for (final List<E> group : result) {
if (groupFunction.sameGroup(element, group.get(0))) {
group.add(element);
groupFound = true;
break;
}
}
if (! groupFound) {
List<E> newGroup = Lists.newArrayList();
newGroup.add(element);
result.add(newGroup);
}
}
return result;
}
public interface GroupFunction<E> {
public boolean sameGroup(final E element1, final E element2);
}
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法来做到这一点,最好是使用番石榴?
我在我的产品中做了一些静力学计算.用户已经执行了许多操作,比方说发布了评论.我希望能够向他们展示他们在过去一个月或过去一年中每个月每周发布的评论数量.
有没有办法用activerecord这种方式分组?我最好只是手动执行此操作 - 根据我自己的标准迭代记录总结?
class User < ActiveRecord::Base
has_many :comments
end
class Comments < ActiveRecord::Base
belongs_to :user
end
@user.comments(:all).map {|c| ...do my calculations here...}
Run Code Online (Sandbox Code Playgroud)
或者有更好的方法吗?
谢谢!奥伦
我需要根据某个属性对值进行分组并填充它.
下面提到的是i/p xml,如果你看到有4行用户和id 2,4分是相同的,即HR
虽然产生实际的o/p我需要按分组分组......任何帮助???
I/P XML
<Users>
<User id="2" name="ABC" Division="HR"/>
<User id="3" name="xyz" Division="Admin"/>
<User id="4" name="LMN" Division="Payroll"/>
<User id="5" name="PQR" Division="HR"/>
</Users>
Run Code Online (Sandbox Code Playgroud)
预期结果:我需要根据Division进行分组并填充ie
<AllUsers>
<Division value="HR">
<User>
<id>2</id>
<name>ABC</name>
</User>
<User>
<id>5</id>
<name>PQR</name>
</User>
</Division>
<Division value="ADMIN">
<User>
<id>3</id>
<name>XYZ</name>
</User>
</Division>
<Division value="Payroll">
<User>
<id>4</id>
<name>LMN</name>
</User>
</Division>
</AllUsers>
Run Code Online (Sandbox Code Playgroud) 我有一个看起来像这样的表:
FOO BAR BAZ
----+----+----
foo1 bar1 baz1
foo2 bar3 baz2
foo3 bar1 baz3
foo4 bar1 baz4
foo5 bar3 baz5
foo6 bar1 baz6
foo7 bar2 baz7
Run Code Online (Sandbox Code Playgroud)
结果我想知道每个栏在表中出现的次数..所以,我正在寻找的输出看起来像这样:
BAR COUNT
-----+-----
bar1 4
bar3 2
bar2 1
Run Code Online (Sandbox Code Playgroud)
我可以在SQLite中查询类似的内容吗?我想它应该很简单,但我不是一个SQL程序员,我只需要这个简单的查询作为python脚本的一部分..谢谢.
给出一个清单
old_list = [obj_1, obj_2, obj_3, ...]
Run Code Online (Sandbox Code Playgroud)
我想创建一个列表:
new_list = [[obj_1, obj_2], [obj_3], ...]
Run Code Online (Sandbox Code Playgroud)
哪里obj_1.some_attr == obj_2.some_attr.
我可以把一些for循环和if检查放在一起,但这很难看.这有什么pythonic方式吗?顺便说一句,对象的属性都是字符串.
或者,也可以理解包含元组(具有相同长度)而不是对象的列表的解决方案.
可能重复:
如何在Oracle中以A,B格式检索两列数据
假设我有一个这样的表:
NAME GROUP_NAME
name1 groupA
name2 groupB
name5 groupC
name4 groupA
name3 groupC
Run Code Online (Sandbox Code Playgroud)
我想得到这样的结果:
GROUP_NAME NAMES
groupA name1,name4
groupB name2
groupC name3,name5
Run Code Online (Sandbox Code Playgroud)
如果表中只有一列,我可以通过执行以下操作来连接记录,但是在上下文中进行分组时,我真的没有太多想法.
连接一个列表:
SELECT names
FROM (SELECT SYS_CONNECT_BY_PATH(names,' ') names, level
FROM name_table
START WITH names = (SELECT names FROM name_table WHERE rownum = 1)
CONNECT BY PRIOR names < names
ORDER BY level DESC)
WHERE rownum = 1
Run Code Online (Sandbox Code Playgroud)
我现在有一个解决方案LISTAGG:
SELECT
group_name,
LISTAGG(name, ', ')
WITHIN GROUP (ORDER BY GROUP) "names"
FROM name_table
GROUP …Run Code Online (Sandbox Code Playgroud) 我不知道如何将两个或多个通知分组到一个并显示"你有两条新消息"这样的消息.
Java 8中是否有任何方法可以将元素分组java.util.stream.Stream而不收集它们?我希望结果Stream再次出现.因为我必须处理大量数据甚至无限流,所以我无法先收集数据并再次流式传输结果.
需要分组的所有元素在第一个流中是连续的.因此我喜欢让流评估保持懒惰.
grouping ×10
java ×2
list ×2
sql ×2
activerecord ×1
android ×1
counting ×1
function ×1
group-concat ×1
guava ×1
if-statement ×1
java-8 ×1
java-stream ×1
match ×1
oracle ×1
performance ×1
perl ×1
python ×1
regex ×1
sorting ×1
sqlite ×1
stack ×1
xslt ×1